我正在尝试通过HTTPS建立连接。我还在Request Header中将“Authorization”属性设置为Basic,并相应地提供编码的auth字符串。
我检查了Firefox插件HttpRequester并且everythign工作正常,这意味着我输入了网址,选择“GET”作为请求方法,将授权添加到标题中,按下提交后我得到一些只有经过适当授权的xml用户应该得到。
不幸的是,我既不能提供实际的身份验证信息,也不能提供SSCCE中的真实网址。但是,我可以告诉你,Auth似乎有效,因为我收到200响应。我还将Auth更改为错误的值,然后获得“401 Authorization Required”响应。
实际上似乎“?myparam = xyz”被切断了,因为当我从url中删除此参数并再次使用Firefox HttpRequester进行测试时,我得到与Java相同的响应。
不幸的是我无法访问“hisdomain.com”,因此我不知道服务器端发生了什么。但由于它适用于Firefox HttpRequester,因此它也适用于Java。
可能是什么原因?谢谢你的帮助!
编辑: 我将网址更改为“https://www.google.com/search?q=foo”并对此行进行了评论:
//con.setRequestProperty("Authorization", auth);
我可以从返回的字符串中看到,google收到了“foo”。显然,Authorization和get参数的组合似乎是问题所在,因为两者分别正常工作。
SSCCE:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
public class HttpRequest
{
/**
* @param args
*/
public static void main(final String[] args)
{
System.out.println("start request");
final String urlString = "https://theirdomain.com/foo/bar/bob?myparam=xyz";
final String auth = "Basic XyzxYzxYZxYzxyzXYzxY==";
HttpsURLConnection con;
try
{
final URL url = new URL(urlString);
con = (HttpsURLConnection) url.openConnection();
con.setRequestProperty("Authorization", auth);
con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
con.setRequestMethod("GET");
// con.setDoOutput(true);
con.connect();
final int responseCode = con.getResponseCode();
if (responseCode != 200)
System.out.println("Server responded with code " + responseCode + " " + con.getResponseMessage());
else
{
System.out.println("Starting to read...");
final InputStream inStream = con.getInputStream();
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
int c;
while (inStream != null && (c = inStream.read()) != -1)
{
baos.write(c);
}
System.out.println(new String(baos.toByteArray()));
}
}
catch (final IOException e)
{
System.out.println("could not open an HTTP connection to url: " + urlString);
e.printStackTrace();
}
finally
{
System.out.println("end request");
}
}
}
答案 0 :(得分:0)
您是否尝试过添加
con.setRequestProperty("myparam", "xyz");
代码?