Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在URL对象中设置自定义HTTP请求头不会';行不通_Java_Url_Http Headers_Http Authentication_Urlconnection - Fatal编程技术网

Java 在URL对象中设置自定义HTTP请求头不会';行不通

Java 在URL对象中设置自定义HTTP请求头不会';行不通,java,url,http-headers,http-authentication,urlconnection,Java,Url,Http Headers,Http Authentication,Urlconnection,我正在尝试使用HTTP从IP摄像头获取图像。摄像头需要HTTP基本身份验证,因此我必须添加相应的请求标头: URL url = new URL("http://myipcam/snapshot.jpg"); URLConnection uc = url.openConnection(); uc.setRequestProperty("Authorization", "Basic " + new String(Base64.encode("user:pass".getBytes())));

我正在尝试使用HTTP从IP摄像头获取图像。摄像头需要HTTP基本身份验证,因此我必须添加相应的请求标头:

URL url = new URL("http://myipcam/snapshot.jpg");
URLConnection uc = url.openConnection();
uc.setRequestProperty("Authorization", 
  "Basic " + new String(Base64.encode("user:pass".getBytes())));

// outputs "null"
System.out.println(uc.getRequestProperty("Authorization"));
我后来将
url
对象传递给
ImageIO.read()
,并且,正如您所猜测的,我得到了一个未经授权的HTTP 401,尽管
user
pass
是正确的

我做错了什么

我还尝试了
新URL(“http://user:pass@myipcam/snapshot.jpg“
,但这也不起作用。

在类中,它扩展了
java.net.HttpURLConnection
,在请求安全敏感信息时,以下方法
getRequestProperty(字符串键)
被重写为返回
null

public String getRequestProperty(String key) {
    // don't return headers containing security sensitive information
    if (key != null) {
        for (int i = 0; i < EXCLUDE_HEADERS.length; i++) {
        if (key.equalsIgnoreCase(EXCLUDE_HEADERS[i])) {
            return null;
        }
        }
    }
    return requests.findValue(key);
}

这就是为什么在
uc.getRequestProperty(“授权”)
上有一个
null
。您是否尝试过使用Apache?

您是否尝试过子类化
URLConnection
HttpURLConnection
并重写
getRequestProperty()
方法

问题已解决。它不起作用,因为我正在将
url
传递到
ImageIO.read()


相反,传递
uc.getInputStream()
让它工作起来。

谢谢,现在我明白了获取
null
的原因。但它为什么返回HTTP 401?是否可能根本没有设置“Authorization”属性?@Blagovest Buyukliev,如果
uc扩展了HttpURLConnection
,则将其键入
HttpURLConnection
,并通过调用
getErrorStream()
获取错误的
InputStream
。包含HTTP 401错误消息的。除此之外,我帮不了你。我尝试了
HttpURLConnection uc=(HttpURLConnection)url.openConnection()
,但结果是一样的。我的问题实际上不在于
getRequestProperty
,而在于unsent授权头。那么是否可以覆盖
openConnection
方法?
// the following http request headers should NOT have their values
// returned for security reasons.
private static final String[] EXCLUDE_HEADERS = {
    "Proxy-Authorization", "Authorization" };