2011-07-21 18 views
-2

我的問題是我想使用Java來實現向某個網站發送HTTP GET請求的應用程序。但是,目標網站需要一個cookie被設置:需要使用Cookie執行HTTP GET的Java Expert幫助

ShippingCountry = US

如果這個cookie沒有設置返回壞跡象。下面是我的代碼段,我從connect()中獲得null。

String urlString = "http://www1.macys.com/catalog/index.ognc?CategoryID=5449&viewall=true"; 
    try{ 
    URL url = new URL(urlString); 
    URLConnection connection = url.openConnection(); 

    connection.addRequestProperty("Cookie", "ShippingCountry=US"); 
    connection.connect(); 

    // Create file 
    FileWriter fstream = new FileWriter("d:/out.txt"); 
    BufferedWriter out = new BufferedWriter(fstream); 
    BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
    StringBuffer sb = new StringBuffer(); 
    String line; 
    while ((line = rd.readLine()) != null) 
    { 
     out.write(line); 
    } 
    rd.close(); 
    //Close the output stream 
    out.close(); 

}

有人可以幫助我嗎?

回答

3

只是猜測,但也許你可能需要setRequestProperty而不是addRequestProperty,因爲請求中只能有一個Cookie字符串。

connection.setRequestProperty("Cookie", "ShippingCountry=US"); 

如果您需要發送多個cookie值你釘他們用冒號:

connection.setRequestProperty("Cookie", "ShippingCountry=US;OtherValue=2"); 

更新:

我試着使用python做一個GET請求,它看起來像我得到500錯誤。也許服務器阻止了請求,因爲它看起來不像Web瀏覽器。也許添加下列頭將工作:

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us 
Accept-Encoding: gzip, deflate 
Connection: keep-alive 

特別是可能需要的AcceptUser-Agent頭。

+1

雖然我總是使用setRequestProerty()我現在檢查了代碼,並看到addRequestProperty()也應該工作。我相信他還有其他問題。 – AlexR

+0

謝謝,但關鍵攔截器仍然沒有從InputStreamReader返回 – Keannylen

+0

謝謝wm_eddie,通過添加標題,它的工作原理:) – Keannylen