标签: httpclient

使用HttpClient的HTTP Post请求需要2秒,为什么?

更新: 自己找到答案,见下文:-)

嗨,

我目前正在编写一个Android应用程序,它使用HTTP Post和AsyncTask在后台提交内容.为此我使用org.apache.http.client包.我的代码基于这个例子.

基本上,我的代码看起来像这样:

public void postData() {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://192.168.1.137:8880/form");

    try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("id", "12345"));
        nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

    } catch (ClientProtocolException e) {
     Log.e(TAG,e.toString());
    } catch (IOException e) {
     Log.e(TAG,e.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是httpclient.execute(..)行需要大约1.5到3秒,我不明白为什么.仅使用HTTP Get请求页面大约需要80 ms左右,因此问题似乎不是网络延迟本身.

问题似乎也不在服务器端,我也尝试将数据发布到http://www.disney.com/同样慢的结果.Firebug在本地向我的服务器发送数据时显示1 …

android http httpclient

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

如何在Android和/或Java中使用HttpClient管理cookie?

我试图登录到网站,并保持该会话/ cookie的,这样服务器会识别出我的登录信息,但我在努力搞清楚提取响应中的cookie,并设置为保持我的登录请求的方式.我想知道我是否应该采用标题"Set-Cookie"或使用CookieStore.任何帮助是极大的赞赏.这是我的代码,其中包含我认为getHeader/getCookie方法的注释.

public class Http
{
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request;
HttpEntity entity;
HttpResponse response;
HttpPost post;
CookieStore cookieStore = new BasicCookieStore();
HttpContext localContext = new BasicHttpContext();

public static void setContext()
{
    localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
}

public static void getPage(String url) throws Exception
{
    request = new HttpGet(url);
    response = client.execute(request, localContext);
    PARSER.preParse(url, response);
}

public static HttpResponse postPage(List<NameValuePair> params, String host, String action) throws Exception
{
    post = new HttpPost(host + action);
    post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));

    response = client.execute(post, …
Run Code Online (Sandbox Code Playgroud)

java cookies android httpclient

40
推荐指数
2
解决办法
7万
查看次数

HttpDelete与身体

我正在尝试使用HttpDelete对象来调用Web服务的delete方法.Web服务的代码从消息的正文中解析JSON.但是,我无法理解如何向HttpDelete对象添加主体.有没有办法做到这一点?

使用HttpPut和HttpPost,我调用setEntity方法并传入我的JSON.HttpDelete似乎没有任何此类方法.

如果无法为HttpDelete对象设置主体,请将我链接到使用超类HttpDelete的资源,以便我可以设置方法(删除)并设置主体.我知道这不太理想,但此时我无法改变网络服务.

android httpclient webservice-client http-delete

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

如何将json添加到java中的http帖子的主体

我正在尝试在java中为我正在处理的Android应用发布一些JSON数据.以下是有效的还是我需要以不同的方式推送JSON字符串?

HttpPost httpost = new HttpPost("http://test.localhost");
httpost.setEntity(new StringEntity("{\"filters\":true}"));
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
//... other java code to execute the apache httpclient
Run Code Online (Sandbox Code Playgroud)

先感谢您

java android json httpclient http-post

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

HttpClient可以抛出哪些异常?

我在xamarin表单项目中使用HttpClient

该类已记录,但我找不到任何有关其方法可能引发异常的文档.

例如,GetAsync方法没有关于可能的异常的任何文档.但我认为它会抛出,例如当服务器无法访问时.

这个类可能会抛出一些例外列表吗?

c# httpclient

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

处理HttpClient重定向

我正在将一些数据发布到正在回答302 Moved Temporarily的服务器上.

我希望HttpClient遵循重定向并自动获取新位置,因为我认为这是HttpClient的默认行为.但是,我得到一个例外,而不是遵循重定向:(

这是相关的代码片段,任何想法都将受到赞赏:

HttpParams httpParams = new BasicHttpParams();
HttpClientParams.setRedirecting(httpParams, true);
SchemeRegistry schemeRegistry = registerFactories();
ClientConnectionManager clientConnectionManager = new ThreadSafeClientConnManager(httpParams, schemeRegistry);

HttpClient httpClient = new DefaultHttpClient(clientConnectionManager, httpParams)
HttpPost postRequest = new HttpPost(url);
postRequest.setHeader(HTTP.CONTENT_TYPE, contentType);
postRequest.setHeader(ACCEPT, contentType);

if (requestBodyString != null) {
    postRequest.setEntity(new StringEntity(requestBodyString));
}

return httpClient.execute(postRequest, responseHandler);
Run Code Online (Sandbox Code Playgroud)

java httpclient

39
推荐指数
2
解决办法
6万
查看次数

如何使用fiddler或任何其他工具跟踪HttpClient请求?

我正在使用HttpClient向我无法访问的web api服务之一发送请求,我需要跟踪从我的客户端到服务器的实际请求流.有没有办法可以连接小提琴手听取请求?

我使用System.Net.Http.HttpClient类发送请求.

更新:现在试图改善这个问题,因为我无法得到我想要的东西.我正在使用.Net客户端应用程序连接到我自己的IIS上通过HTTP通道托管的Web服务.我之前使用在我的IIS上托管的网站进行了小提琴调试,并观察了我的浏览器和WebSite之间产生的流量.但是,当看到.Net客户端程序使用HttpClient类与Web服务进行通信时产生的流量时,奇怪的是,小提琴手似乎无法利用该流量并且不会显示任何内容..Net HttpClient是否绕过WinInet API连接到服务,导致小提琴手无法观看流量?

c# httpclient fiddler c#-4.0

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

如何在HttpClient 4.1中处理会话

我正在使用HttpClient 4.1.1来测试我的服务器的REST API.

我可以设法登录似乎工作正常,但当我尝试做任何其他事情我失败了.

我很可能在下一个请求中设置cookie时遇到问题.

这是我目前的代码:

HttpGet httpGet = new HttpGet(<my server login URL>);
httpResponse = httpClient.execute(httpGet)
sessionID = httpResponse.getFirstHeader("Set-Cookie").getValue();
httpGet.addHeader("Cookie", sessionID);
httpClient.execute(httpGet);
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来管理HttpClient包中的会话/ cookie设置?

java cookies session httpclient

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

httpclient异常"org.apache.http.conn.ConnectionPoolTimeoutException:超时等待连接"

我正在尝试使用以下代码向我的服务器发送请求.总是在第3次请求时失败了.

import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;

public class HttpClientTest {
    private HttpClient client;

    public HttpClientTest() {
        HttpParams params = new BasicHttpParams();
        params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 15000);  
        params.setParameter(CoreConnectionPNames.SO_TIMEOUT, 15000);

        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, "utf-8");
        HttpProtocolParams.setUseExpectContinue(params, true);
        ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager();
        cm.setMaxTotal(100);
        client = new DefaultHttpClient(cm, params);

        while (true) { …
Run Code Online (Sandbox Code Playgroud)

java exception httpclient

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

使用HTTPS的HttpGet:SSLPeerUnverifiedException

使用HttpClient时,尝试通过HTTPS进行通信时收到以下错误:

线程"main"中的异常javax.net.ssl.SSLPeerUnverifiedException:peer未经过身份验证.

这是我的代码:

URI loginUri = new URI("https://myUrl.asp");

HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet( loginUri );
HttpResponse response = httpclient.execute( httpget );
Run Code Online (Sandbox Code Playgroud)

如何抑制或删除此错误?

java ssl https httpclient

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