标签: httpurlconnection

HttpURLConnection在Android 2.x中运行良好但在4.1中没有运行:没有发现身份验证挑战

我有一些典型的代码使用HttpURLConnection来获取带有URL的文件.他们在android 1.x和2.x中运行良好.但在Android 4.1中失败了!

我在网上搜索但发现的信息很少.有人请帮忙调查这个问题吗?

private String mURLStr; 
private HttpURLConnection mHttpConnection;

...

url = new URL(mURLStr);

...

mHttpConnection = (HttpURLConnection) url.openConnection();
mHttpConnection.setDoOutput(true);
mHttpConnection.setRequestMethod("GET");

...

InputStream is = mHttpConnection.getInputStream();
Run Code Online (Sandbox Code Playgroud)

getInputStream方法抛出异常:

08-01 15:56:48.856: W/System.err(13613): java.io.IOException: No authentication challenges found
08-01 15:56:48.856: W/System.err(13613):      at libcore.net.http.HttpURLConnectionImpl.getAuthorizationCredentials(HttpURLConnectionImpl.java:427)
08-01 15:56:48.866: W/System.err(13613):      at libcore.net.http.HttpURLConnectionImpl.processAuthHeader(HttpURLConnectionImpl.java:407)
08-01 15:56:48.866: W/System.err(13613):      at libcore.net.http.HttpURLConnectionImpl.processResponseHeaders(HttpURLConnectionImpl.java:356)
08-01 15:56:48.866: W/System.err(13613):      at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
08-01 15:56:48.866: W/System.err(13613):      at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
...
Run Code Online (Sandbox Code Playgroud)

authentication android httpurlconnection

30
推荐指数
3
解决办法
2万
查看次数

将Cookie从HttpURLConnection(java.net.CookieManager)传递到WebView(android.webkit.CookieManager)

我已经看到了关于它应该如何与旧版本一起工作的答案,DefaultHttpClient 但是没有一个很好的例子HttpURLConnection

我正在使用HttpURLConnectionWeb应用程序发出请求.在我的Android应用程序开始时,我使用CookieHandler.setDefault(new CookieManager())自动处理会话cookie,这工作正常.

在登录后的某个时刻,我想用Web应用程序向用户显示实时页面WebView而不是在后台下载数据HttpURLConnection.但是,我想使用我之前建立的相同会话来防止用户再次登录.

如何复制饼干从java.net.CookieManager使用HttpURLConnectionandroid.webkit.CookieManager使用的WebView,所以我可以共享会话?

cookies android httpurlconnection single-sign-on android-webview

30
推荐指数
3
解决办法
4万
查看次数

HttpURLConnection.getResponseCode()在第二次调用时返回-1

当我正在使用的库(路标1.1-SNAPSHOT)时,我似乎在Android 1.5上遇到了一个特殊的问题,它连续两次连接到远程服务器.第二个连接始终失败了HttpURLConnection.getResponseCode()-1

这是一个暴露问题的测试用例:

// BROKEN
public void testDefaultOAuthConsumerAndroidBug() throws Exception {
    for (int i = 0; i < 2; ++i) {
        final HttpURLConnection c = (HttpURLConnection) new URL("https://api.tripit.com/oauth/request_token").openConnection();
        final DefaultOAuthConsumer consumer = new DefaultOAuthConsumer(api_key, api_secret, SignatureMethod.HMAC_SHA1);
        consumer.sign(c);                             // This line...
        final InputStream is = c.getInputStream();
        while( is.read() >= 0 ) ;                     // ... in combination with this line causes responseCode -1 for i==1 when using api.tripit.com but not mail.google.com
        assertTrue(c.getResponseCode() > 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上,如果我签署请求然后使用整个输入流,则下一个请求将失败,结果代码为-1.如果我只是从输入流中读取一个字符,似乎不会发生故障.

请注意,任何网址都不会发生这种情况 - …

java android oauth httpurlconnection signpost

29
推荐指数
3
解决办法
5万
查看次数

Java Webstart和URLConnection缓存API

URLConnection缓存API的描述表示为最后一句:

Java 2 Standard Edition中没有URLConnection缓存的默认实现.但是,Java Plugin和Java WebStart确实提供了一个开箱即用的功能.

在哪里可以找到有关Webstart ResponseCache的更多信息?

  • Webstart的哪些版本在哪些平台上激活缓存?
  • 它在哪些情况下有效?只有HTTP获取?
  • 可以配置吗?
  • 源代码是否可用?

背景:

情况1

使用以下(groovy)代码

def url = new URL('http://repo1.maven.org/maven2/')
def connection = url.openConnection()
def result = connection.inputStream.text
Run Code Online (Sandbox Code Playgroud)

我希望每次执行代码时都会联系服务器.但是在执行时

Java Web Start 10.9.2.05
JRE-Version verwenden 1.7.0_09-b05 Java HotSpot(TM) Client VM
Run Code Online (Sandbox Code Playgroud)

行为是不同的.第一次执行代码时,会联系服务器.所有后续的代码执行都不涉及与服务器的任何通信(使用wireshark跟踪).

但它变得更加奇怪.重新启动webstart应用程序后,第一次执行代码时,http://repo1.maven.org/maven2/.pack.gz请求url 导致a 404.仅请求原始网址导致a 304 NOT MODIFIED.所有后续执行都不涉及与服务器的任何通信.

我认为通过缓存功能透明地增强urlconnection的方法很好,很好,有助于提高客户端应用程序的性能.但由于本例中的服务器没有定义Expires头,也没有定义缓存控制头,我认为上面的代码应该总是询问服务器而不是默默地忽略我的请求.

案例2

以下代码在使用webstart 10.1.1.255执行时不起作用(这是由java 7的早期测试版安装的,但我不知道这是哪一个)

URL url = new URL("http://repo1.maven.org/maven2/");
URLConnection connection = url.openConnection();
connection.setRequestProperty("Accept-Encoding", "gzip");
connection.connect();
InputStream is = connection.getInputStream();
if ("gzip".equalsIgnoreCase(connection.getContentEncoding()))
{
    is = new …
Run Code Online (Sandbox Code Playgroud)

java caching urlconnection httpurlconnection java-web-start

27
推荐指数
1
解决办法
2902
查看次数

如果HttpURLConnection与CookieManager自动处理会话cookie?

我有一个Java应用程序(JDK 1.7.0_13),并使用java.net.HttpURLConnection连接到一些基于servlet的服务进行会话管理.我试图弄清楚如何使用java.net.CookieManager来跟踪会话cookie.阅读文档我得到的印象是,使用CookieHandler.setDefault(新的CookieManager())安装CookieManager会导致cookie管理自动发生.但是,对同一URL的多个请求似乎不保留cookie.我是否必须手动从响应中提取cookie并在我自己的请求中重新发送它们,或者CookieManager是否会自动为我执行此操作?如果CookieManager没有,那么它添加了什么值?

为了测试一些东西,我有一个servlet,每当我的浏览器访问一个URL时,它就会成功递增一个计数器.这可以在Safari,FireFox和Chrome中正常工作......但是,我无法从独立的Java应用程序中使用它.

这是一个非常简单的测试程序,用于说明我希望简单的工作.它在开始时安装CookieManager,然后在控制台输入URL时重复调用fetch(String urlString)方法.

package com.brilliant.experimental;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpFetcher {  
    public static void fetch(String urlString) {
        try {
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            InputStream in = conn.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            int status = conn.getResponseCode();
            System.out.println("Status = " + status);
            String key;
            System.out.println("Headers-------start-----");
            for (int i = 1; (key = conn.getHeaderFieldKey(i)) != null; i++) {
                System.out.println(key + …
Run Code Online (Sandbox Code Playgroud)

java cookies httpurlconnection cookiemanager

27
推荐指数
1
解决办法
4万
查看次数

如何重用HttpUrlConnection?

我有兴趣重用一个HttpUrlConnection(作为我正在开发的服务器和客户端之间的状态协议的一部分).我知道持久性http有一个Connection = keep-alive标头.现在,我想知道如何重用这种结合.我写了这段代码:

URL u = new java.net.URL("http://localhost:8080/Abc/Def");
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setRequestProperty("Connection", "keep-alive");
c.setHeader("A","B");
c.getInputStream() //here I see that server gets my messages (using DEBUG)
c.setHeader("B","C"); //
Run Code Online (Sandbox Code Playgroud)

现在我如何重新发送这个"B"标头到服务器,我尝试重新连接等,但没有任何东西让它工作.

而服务器也执行 response.setHeader("Connection", "keep-alive");

我看过许多论坛,但没有人写过这个.也许HttpURLConnection不处理这个?

java servlets http httpurlconnection

27
推荐指数
1
解决办法
2万
查看次数

如何修改HttpUrlConnection的标头

我试图改进Java Html文档一点点,但我遇到了问题HttpUrlConntion.有一点是,如果用户代理是Java VM,某些服务器会阻止请求.另一个问题是HttpUrlConnection没有设置ReferrerLocation头字段.由于几个站点使用这些字段来验证内容是从他们自己的站点访问的,因此我也被阻止了.据我所知,唯一的解决方案是替换HTTP协议的URL处理程序.或者有没有办法修改默认的HTTP Handler?

java http httpurlconnection http-headers

26
推荐指数
1
解决办法
6万
查看次数

使用HttpURLConnection和HttpsURLConnection连接到https?

如果我尝试使用HttpURLConnection和连接到"https"有什么区别HttpsURLConnection

我能够使用两者连接到"https" HttpURLConnection,HttpsURLConnection所以我很困惑.如果我使用的话,我想我只能建立与"https"的连接HttpsURLConnection?

以下是我的一些问题:

  • 如果我能够使用HttpURLConnection打开与"https"的连接,我的连接仍然是"https"还是变成"http"?
  • 如何验证证书?因为我没有任何SSLSocketFactoryHostnameVerifierHttpURLConnection同时连接的"https"开头,怎么SSLSocketFactoryHostnameVerifier我使用的?
  • 无论证书是否可信,这是否意味着我信任一切?

android httpurlconnection

26
推荐指数
1
解决办法
2万
查看次数

为什么我收到此错误提前结束文件?

我试图解析XML response,但我失败了.我最初认为xml只是没有在回复中返回,所以我通过直接链接到我的xml文件在线制作了下面的代码.我能够毫无问题地打印XML到屏幕.但是,当我调用我的parse方法时,我得到文件的过早结束.

如果我直接传递URL,它可以工作:

  • builder.parse( "");

但是当我传递一个InputStream时失败:

  • builder.parse(connection.getInputStream());

      try {
        URL url = new URL(xml);
        URLConnection uc =  url.openConnection();
        HttpURLConnection  connection = (HttpURLConnection )uc;
    
        connection.setDoInput(true);
        connection.setDoOutput(true);
    
        InputStream instream;
        InputSource source;
        //get XML from InputStream
        if(connection.getResponseCode()>= 200){
            connection.connect();       
            instream = connection.getInputStream();         
            parseDoc(instream);     
        }
        else{
            instream = connection.getErrorStream();
        }
    
    
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParserConfigurationException …
    Run Code Online (Sandbox Code Playgroud)

java xml httpurlconnection

26
推荐指数
2
解决办法
17万
查看次数

如何将请求有效负载发送到Java中的REST API?

我想从以下内容中检索JSON数据:https: //git.eclipse.org/r/#/c/11376/

请求网址: https://git.eclipse.org/r/gerrit/rpc/ChangeDetailService

请求方法: POST

请求标题:

Accept:application/json

Content-Type:application/json; charset=UTF-8
Run Code Online (Sandbox Code Playgroud)

请求有效负载:

{"jsonrpc":"2.0","method":"changeDetail","params":[{"id":11376}],"id":1}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个答案,但我得到了400 BAD REQUEST.

任何人都可以帮我解决这个问题吗?

谢谢.

java rest httpurlconnection http-status-code-400

26
推荐指数
1
解决办法
11万
查看次数