标签: httpclient

除了WebView.getSettings()之外,有没有办法获取默认的用户代理字符串.getUserAgentString()?

我想在HttpClient连接中使用手机的默认用户代理,并想知道是否有办法获取用户代理而无需使用WebView进行查询.

user-agent android httpclient

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

Java NoSuchAlgorithmException - SunJSSE,sun.security.ssl.SSLContextImpl $ DefaultSSLContext

背景

我一直在自己的Eclipse项目中使用Authorize.net SDK.一切都很好.然后我需要将它添加到我的主项目中.我将依赖项添加到类路径中,并将其复制到我需要的代码块中.它应该有效.

问题

长话短说,代码在我放置它的地方不起作用.但是,当我把它带到项目中的main方法时,它将起作用.

在它不起作用的地方我用调试器逐步完成代码并发现以下异常:

java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)
Run Code Online (Sandbox Code Playgroud)

抛出:

HttpResponse httpResponse = httpClient.execute(httpPost);
Run Code Online (Sandbox Code Playgroud)

注意:来自Apache的httpClient = DefaultHttpClient

我现在完全被难倒了.不要导致此错误的原因.在Eclipse中,这两个产品似乎都针对相同的JRE.他们也都有httpclient-4.0.1.jar.请注意,有问题的项目还有一些其他依赖项,工作项目不会{boneCP,guava,mysql_connector_java,protobuf}

我不认为额外的罐子是原因,因为问题代码在项目的不同位置工作.

非常感谢任何有关错误的想法,我花了一天时间调试这个,不知道下一步该怎么做.

谢谢.

java exception httpclient

23
推荐指数
2
解决办法
8万
查看次数

Httpclient 4,错误302.如何重定向?

我想访问一个首先需要(tomcat服务器)身份验证的站点,然后使用POST请求登录并让该用户查看该站点的页面.我使用Httpclient 4.0.1

第一次身份验证工作正常但不是总是抱怨此错误的登录:"302暂时移动"

我保持饼干和我保持上下文,但没有.实际上,似乎登录工作,因为如果我写错了参数或用户||密码,我会看到登录页面.所以我猜不起作用的是自动重定向.

在我的代码之后,它始终抛出IOException,302:

    DefaultHttpClient httpclient = new DefaultHttpClient();
    CookieStore cookieStore = new BasicCookieStore();
    httpclient.getParams().setParameter(
      ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY); 
    HttpContext context = new BasicHttpContext();
    context.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
    //ResponseHandler<String> responseHandler = new BasicResponseHandler();

    Credentials testsystemCreds = new UsernamePasswordCredentials(TESTSYSTEM_USER,  TESTSYSTEM_PASS);
    httpclient.getCredentialsProvider().setCredentials(
            new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
            testsystemCreds);

    HttpPost postRequest = new HttpPost(cms + "/login");
    List<NameValuePair> formparams = new ArrayList<NameValuePair>();
    formparams.add(new BasicNameValuePair("pUserId", user));
    formparams.add(new BasicNameValuePair("pPassword", pass));
    postRequest.setEntity(new UrlEncodedFormEntity(formparams, "UTF-8"));
    HttpResponse response = httpclient.execute(postRequest, context);
    System.out.println(response);

    if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK)
        throw new IOException(response.getStatusLine().toString());

    HttpUriRequest currentReq = (HttpUriRequest) context.getAttribute( …
Run Code Online (Sandbox Code Playgroud)

java authentication post httpclient http-status-code-302

22
推荐指数
4
解决办法
5万
查看次数

java中的HttpClient

我想使用一个简单的HttpClient.

但是,看来sun.net.www.http.HttpClient是无法访问的.

此外,com.ibm.ws.http.HTTPConnection - 似乎更支持http服务器而不是客户端.为什么?因为当我创建一个HttpConnection实例时,它有一个我应该写的"getHttpResponse".

无论如何使用IBM HttpConnection for HttpClient?

或者,我可以使用任何标准的httpClient代码吗?

谢谢.

java http httpclient

22
推荐指数
3
解决办法
7万
查看次数

HttpClient警告:Cookie被拒绝:非法域属性

我正在使用HttpClient最新版本(4.x).而现在我正在尝试做一个GET请求.我刚刚发布了一个Get请求.

这是我的代码;

public class Poster {

    static boolean routing1 = true, routing2 = true;
    static int counter1 = 0, counter2 = 0;
    DefaultHttpClient oHtp = null;
    HttpGet oHGet = null;
    HttpResponse oHRes = null;


    private void test(String fullAddress) throws Exception {
        oHtp = new DefaultHttpClient();
        oHGet = new HttpGet(fullAddress);

        HttpResponse response = oHtp.execute(oHGet);
        System.out.print(response.getStatusLine());

        HttpEntity entity = response.getEntity();
        if (entity != null) {
            entity = new BufferedHttpEntity(entity);
            //  System.out.println(EntityUtils.toString(entity));
            System.out.print("\t entity is retrieved... ");
        }


        oHtp.getConnectionManager().shutdown();
    }
}
Run Code Online (Sandbox Code Playgroud)

我只是很好地执行它.首先是

new …
Run Code Online (Sandbox Code Playgroud)

java cookies warnings httpclient

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

常见的HTTP客户端和代理

我正在使用apache的常见httpclient库.是否可以通过代理发出HTTP请求?更具体地说,我需要使用代理列表来处理多线程POST请求(现在我正在使用单线程GET请求进行测试).

我试着用:

        httpclient.getHostConfiguration().setProxy("67.177.104.230", 58720);
Run Code Online (Sandbox Code Playgroud)

我得到了该代码的错误:

21.03.2012. 20:49:17 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: I/O exception (java.net.ConnectException) caught when processing request: Connection refused: connect
21.03.2012. 20:49:17 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: Retrying request
21.03.2012. 20:49:19 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: I/O exception (java.net.ConnectException) caught when processing request: Connection refused: connect
21.03.2012. 20:49:19 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: Retrying request
21.03.2012. 20:49:21 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: I/O exception (java.net.ConnectException) caught when processing request: Connection refused: connect
21.03.2012. 20:49:21 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: Retrying request
org.apache.commons.httpclient.ProtocolException: The server xxxxx failed to respond with a …
Run Code Online (Sandbox Code Playgroud)

java proxy post get httpclient

22
推荐指数
4
解决办法
10万
查看次数

如何从HttpClient获取最后一个网址?

好的,我最近切换到.NET framework 4.5并开始使用HttpClient而不是HttpWebRequest和Response.我真的很喜欢async/await风格,但我不知道如何在POST/GET请求后获取重定向的url.

使用HttpWebResponse,我可以使用.ResponseUri属性

HttpWebRequest request = (HttpWebRequest)WebRequest.Create ("http://www.google.com");
HttpWebResponse response = (HttpWebResponse)request.GetResponse ();
string responseURI = response.ResponseUri;
Run Code Online (Sandbox Code Playgroud)

花了我3个小时的搜索,我仍然无法完成它:(

c# redirect httpclient

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

HttpClient在执行第二个请求时挂起

我正在编写一个可以在网站上登录和购物的Java应用程序.当我尝试执行第二个HttpResponse/Post时,我遇到了HttpClient挂起的问题.它之前工作正常,不知道为什么它开始挂起.我没有得到任何错误,它只是坐在那里而陷入困境.我做的唯一一个可能导致这种挂断的变化是我正在使用HttpGet来检索令牌,所以我可以登录到该网站.

这是我如何设置httpClient

private static BasicCookieStore cookieStore = new BasicCookieStore();
private static HttpClient httpClient = HttpClientBuilder.create().setDefaultCookieStore(cookieStore).build();
Run Code Online (Sandbox Code Playgroud)

其余的只是一个标准的httpget&httppost,然后是httpclient.execute();

第一个序列是我的程序查询网站并检索令牌,然后我发送带有令牌的POST以登录.之后,我的程序再次查询网站以获取产品信息,然后添加到购物车.但它在第二次POST时挂起.

我可以在某个地方错过同花顺吗?我正在读某个地方,这种HttpClient关闭了.DefaultHttpClient已被弃用.

java apache httpclient hang

22
推荐指数
2
解决办法
6677
查看次数

C#如何将HttpClient Keep-Alive设置为false

我在.NET上的HTTP请求有一个低性能问题.对localhost上的REST API的HTTP GET请求大约需要500毫秒才能完成.我花了很多时间来解决它.我曾尝试过很多办法:HttpClient,HttpWebRequest,WebClientRestSharp.他们都没有工作.互联网上的大多数解决方案都说要设置Proxy参数,null但它仍然无法更快地运行.

我发现减少这个时间的唯一方法是将请求的Keep-Alive参数设置为false:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Run Code Online (Sandbox Code Playgroud)

这非常有效.时间减少到7-10毫秒.但现在由于某些原因我需要使用HttpClient而不是HttpWebRequest.而且我找不到如何将Keep-Alive设置为false HttpClient.我发现的唯一一件事就是如何通过将"连接"标题设置为"保持活跃"来将其设置为true.

我在HttpClient上使用此代码进行POST请求:

        HttpClient _http = new HttpClient();
        _http.DefaultRequestHeaders.Accept.Clear();
        _http.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
        _http.DefaultRequestHeaders.Add("Keep-Alive", "timeout=600");

        var content = new StringContent(
            request, Encoding.UTF8, "application/%appname%+xml");
        content.Headers.ContentType.Parameters.Add(
            new NameValueHeaderValue("type", "payload"));

        HttpResponseMessage response = await _http.PostAsync(uri, content);
Run Code Online (Sandbox Code Playgroud)

它仍然需要大约500-600毫秒才能完成.

.net c# rest httpclient httpwebresponse

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

4G/LTE上的Android HttpClient OOM(HTC Thunderbolt)

当我尝试在Verizon的4G/LTE上使用我的应用程序时,我收到了一些崩溃用户的报告.

查看堆栈跟踪,看起来Android的HttpClient.execute()实现正在抛出一个OOM.这仅发生在4G/LTE设备上,特别是HTC Thunderbolt,并且仅在4G/LTE上.WiFi,3G,UMTS都可以.也适用于Sprint的WiMax 4G工作正常.

两个问题:

  • 什么是引起Android开发者注意的最佳方式?除了在http://code.google.com/p/android/issues上报告之外,还有哪些更好的选择?

  • 关于如何解决这个问题的任何想法?我自己没有4G设备,我无法在模拟器中实现这一点,所以我需要在这里做一些有根据的猜测.我可以尝试在我的代码中捕获OOM并尝试清理并强制GC,但我不确定这是不是一个好主意.评论或其他建议?

这是我的代码正在做的事情:

    HttpParams params = this.getHttpParams(); // returns params
    ClientConnectionManager cm = new ThreadSafeClientConnManager(params, this.getHttpSchemeRegistry() );
    DefaultHttpClient httpClient = new DefaultHttpClient( cm, params );

    HttpResponse response = null;
    request = new HttpGet( url );

    try {

        response = httpClient.execute(request); // <-- OOM on 4G/LTE. OK otherwise
        int statusCode = response.getStatusLine().getStatusCode();
        Log.i("fetcher", "execute returned, http status " + statusCode );

    ...
Run Code Online (Sandbox Code Playgroud)

这是崩溃的堆栈跟踪:

E/dalvikvm-heap(11639):2055696字节分配的内存不足.I/dalvikvm(11639):"Thread-16"prio = 5 tid = 9 RUNNABLE I/dalvikvm(11639):| group ="main"sCount = …

android httpclient htc-thunderbolt 4g htc-android

21
推荐指数
1
解决办法
4640
查看次数