我的问题是我想用Java来实现一个向某个网站发送HTTP GET请求的应用程序。但是,目标网站需要设置一个cookie:
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();
}
有人能帮助我吗?
答案 0 :(得分: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
特别是可能需要Accept
和User-Agent
标头。