标签: httpclient

C#:带有POST参数的HttpClient

我使用下面的代码向服务器发送POST请求:

string url = "http://myserver/method?param1=1&param2=2"    
HttpClientHandler handler = new HttpClientHandler();
HttpClient httpClient = new HttpClient(handler);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
HttpResponseMessage response = await httpClient.SendAsync(request);
Run Code Online (Sandbox Code Playgroud)

我没有访问服务器进行调试,但我想知道,这个请求是以POST还是GET发送的?

如果是GET,如何更改我的代码以将param1和param2作为POST数据发送(不在URL中)?

c# parameters post httpclient

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

HttpClient与HttpWebRequest相比,可提供更好的性能和安全性以及更少的连接

我做了一些简单的测试比较和我发现的一些信息

单个HttpClient可以由多个请求共享,如果共享并且请求到达同一目的地,则多个请求可以重用WebRequest需要为每个请求重新创建连接的连接.

我还查阅了一些关于使用HttpClient示例的其他方法的文档

以下文章总结了高速NTLM身份验证的连接共享

HttpWebRequest.UnsafeAuthenticatedConnectionSharing  

我尝试过的可能实现如下所示

一个)

private WebRequestHandler GetWebRequestHandler()
{
    CredentialCache credentialCache = new CredentialCache();
    credentialCache.Add(ResourceUriCanBeAnyUri, "NTLM", CredentialCache.DefaultNetworkCredentials);
    WebRequestHandler handler = new WebRequestHandler
    {
        UnsafeAuthenticatedConnectionSharing = true,
        Credentials = credentialCache
    };

    return handler;
}

using (HttpClient client = new HttpClient(GetWebRequestHandler(), false))
{
}
Run Code Online (Sandbox Code Playgroud)

B)

using (HttpClient client = new HttpClient)
{
}
Run Code Online (Sandbox Code Playgroud)

C)

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("some uri string")
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何帮助,让我了解应该采取哪种方法,以实现最大性能,最小化连接并确保安全性不受影响.

c# httpclient httpwebrequest asp.net-web-api

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

Retrofit 2.0-beta-2正在为MultiPart值添加文字引号

我们升级到Retrofit 2.0并遇到了这个奇怪的问题.

我有一个方法来记录用户

public interface ApiInterface {

    @Multipart
    @POST("user/login/")
    Call<SessionToken> userLogin(@Part("username") String username, @Part("password") String password);
}
Run Code Online (Sandbox Code Playgroud)

当我查看服务器端的键值POST params时,它们就像这样打印

username : "brian"
password : "password"
Run Code Online (Sandbox Code Playgroud)

使用改造1.9的相同方法K:V对看起来像

username : brian
password : password
Run Code Online (Sandbox Code Playgroud)

它正在为POST变量添加文字引号

如果我使用任何其他休息客户端,变量打印就像没有引号的第二种方式.

以下是我使用拦截器构建Retrofit实例的方法

 OkHttpClient client = new OkHttpClient();
    client.interceptors().add(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request original = chain.request();

            // Customize the request
            Request request = original.newBuilder()
                    .header("Accept", "application/json")
                    .header("Authorization", myPrefs.accessToken().getOr(""))
                    .method(original.method(), original.body())
                    .build();

            Response response = chain.proceed(request);

            // Customize or return the response …
Run Code Online (Sandbox Code Playgroud)

httpclient androidhttpclient retrofit okhttp

25
推荐指数
3
解决办法
4611
查看次数

Angular4:Http - > HttpClient - requestOptions

所以,我正试图从'旧'http迁移到新的httpClient

使用http客户端我在我的服务中使用这种格式:

return this.http.get(environment.api+ '.feed.json', requestOptions)
Run Code Online (Sandbox Code Playgroud)

我如何在httpClient中使用它?

尝试了许多thiungs ...包括

return this.http.get(environment.api+ '.feed.json', {params: requestOptions.params})
Run Code Online (Sandbox Code Playgroud)

但得到一个类型错配:(

httpclient angular

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

我应该在哪里开始调查SocketTimeoutException:读取超时

我不时地在日志中看到以下堆栈跟踪,HttpClient套接字超时试图text/script从另一个服务器访问内容.我的问题是我应该在Linux上检查在Weblogic上运行的J2EE应用程序的配置设置是什么?我特意寻找以下内容.

  • JVM超时参数
  • HttpClient PARAMS
  • Weblogic超时参数或任何其他配置,如线程数等.
  • J2EE应用程序设置,如servlet配置等.
  • 操作系统资源,如线程,文件处理程序和cpu
  • 可能影响套接字连接的任何其他配置设置
  • 线程转储会有帮助吗?

这是我的代码

HTTPResponse httpClientResponse;
//do some stuff
httpClientResponse.getStatusCode(); // this is where it fails
Run Code Online (Sandbox Code Playgroud)

这就是堆栈跟踪

java.net.SocketTimeoutException: Read timed out
at jrockit.net.SocketNativeIO.readBytesPinned(Native Method)
at jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:32)
at java.net.SocketInputStream.socketRead0(SocketInputStream.java)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at HTTPClient.BufferedInputStream.fillBuff(BufferedInputStream.java:206)
at HTTPClient.BufferedInputStream.read(BufferedInputStream.java:126)
at HTTPClient.StreamDemultiplexor.read(StreamDemultiplexor.java:356)
at HTTPClient.RespInputStream.read(RespInputStream.java:147)
at HTTPClient.RespInputStream.read(RespInputStream.java:108)
at HTTPClient.Response.readResponseHeaders(Response.java:1123)
at HTTPClient.Response.getHeaders(Response.java:846)
at HTTPClient.Response.getStatusCode(Response.java:331)
at HTTPClient.RetryModule.responsePhase1Handler(RetryModule.java:92)
at HTTPClient.HTTPResponse.handleResponseImpl(HTTPResponse.java:872)
at HTTPClient.HTTPResponse.access$000(HTTPResponse.java:62)
at HTTPClient.HTTPResponse$2.run(HTTPResponse.java:839)
at HTTPClient.HTTPResponse$2.run(HTTPResponse.java:837)
at
HTTPClient.HttpClientConfiguration.doAction(HttpClientConfiguration.java:666)
at HTTPClient.HTTPResponse.handleResponse(HTTPResponse.java:837)
at HTTPClient.HTTPResponse.getStatusCode(HTTPResponse.java:242) 
Run Code Online (Sandbox Code Playgroud)

谢谢

我将使用下面的调查结果更新我的问题.

  1. 没有明确的超时设置,HttpClient这意味着服务器的http会话超时可能正在生效.
  2. SO_TIMEOUTfor HttpClient …

java apache weblogic httpclient java-ee

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

如何在HttpClient的请求中添加,设置和获取Header?

在我的应用程序中,我需要在请求中设置标题,我需要在控制台中打印标题值...所以请举例说明HttpClient或在我的代码中编辑它...

我的代码是,

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

public class SimpleHttpPut { 
  public static void main(String[] args) {
    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost("http://http://localhost:8089/CustomerChatSwing/JoinAction");
    try {
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
      nameValuePairs.add(new BasicNameValuePair("userId",
      "123456789"));
      post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

      HttpResponse response = client.execute(post);
      BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
      String line = "";
      while ((line = rd.readLine()) != null) {
    System.out.println(line); …
Run Code Online (Sandbox Code Playgroud)

java servlets http httpclient apache-httpclient-4.x

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

HttpClient和SOAP(C#)

我正在尝试使用HttpClient类发送SOAP消息:

使用REST这样做很容易(代码来自这里):

using System;
using System.Net.Http;
using System.Json;

namespace ConsoleApplication39
{
class Program
{
static void Main(string[] args)
{

HttpClient proxy = new HttpClient();
proxy.GetAsync("http://localhost:14892/api/Bloggers").ContinueWith((r) =>
{
HttpResponseMessage response = r.Result;
response.Content.ReadAsAsync<JsonArray>().ContinueWith(
(a)=>
{
foreach(var w in a.Result)
{
Console.WriteLine(w.ValueOrDefault("Name").ToString());
Console.WriteLine(w.ValueOrDefault("Intrest").ToString());
}
});

});

Console.ReadKey(true);

}

}
}
Run Code Online (Sandbox Code Playgroud)

我想用SOAP做类似的事情.

我有主机(http://opensearch.addi.dk/2.2/)和POST消息的SOAP消息:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://oss.dbc.dk/ns/opensearch">
  <SOAP-ENV:Body>
    <ns1:searchRequest>
      <ns1:query>dc.title=zorro AND dc.type=bog</ns1:query>
      <ns1:agency>100200</ns1:agency>
      <ns1:profile>test</ns1:profile>
      <ns1:start>1</ns1:start>
      <ns1:stepValue>10</ns1:stepValue>
    </ns1:searchRequest>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)

......但是怎么发送呢?

我承认这是我用过的第一个SOAP Web服务,所以我可能不知道我在做什么,但最简单的形式可能是:

            HttpClient hc = new HttpClient(); …
Run Code Online (Sandbox Code Playgroud)

c# soap httpclient

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

Android JSON HttpClient使用HttpResponse将数据发送到PHP服务器

我目前正在尝试将一些来自Android应用程序的数据发送到php服务器(两者都由我控制).

在应用程序中的表单上收集了大量数据,这些数据被写入数据库.这一切都有效.

在我的主要代码中,首先我创建了一个JSONObject(我在这里为此示例删除了它):

JSONObject j = new JSONObject();
j.put("engineer", "me");
j.put("date", "today");
j.put("fuel", "full");
j.put("car", "mine");
j.put("distance", "miles");
Run Code Online (Sandbox Code Playgroud)

接下来,我将对象传递给发送,并收到响应:

String url = "http://www.server.com/thisfile.php";
HttpResponse re = HTTPPoster.doPost(url, j);
String temp = EntityUtils.toString(re.getEntity());
if (temp.compareTo("SUCCESS")==0)
{
    Toast.makeText(this, "Sending complete!", Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)

HTTPPoster类:

public static HttpResponse doPost(String url, JSONObject c) throws ClientProtocolException, IOException 
{
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost request = new HttpPost(url);
    HttpEntity entity;
    StringEntity s = new StringEntity(c.toString());
    s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
    entity = s;
    request.setEntity(entity);
    HttpResponse response;
    response = …
Run Code Online (Sandbox Code Playgroud)

php android json httpresponse httpclient

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

管理身份验证令牌的最佳做法

我正在使用HttpCLient在Java中编写REST客户端,我访问的REST API需要每个REST操作的身份验证令牌.此令牌有效期为24小时.

我现在处理这个问题的getAuth()方法是每当我需要进行REST调用时调用一个" "方法,这似乎是auth服务器上的开销.

如何方便地存储此身份验证令牌并管理其生命周期?是否有任何记录的最佳实践?

我想到了以下解决方案

public class MySession {
    String user;
    String pass;
    public MySession(String user, String pass) {
        this.user = user;
        this.pass = pass;
    }

    public getAuth() {
        //user user, pass to get auth token 
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将sessions对象传递给任何需要该令牌的类.如果令牌已过期,请再次调用此方法

java authentication rest httpclient

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

Singleton httpclient vs创建新的httpclient请求

我正在尝试使用Xamarin.Forms移动应用程序中的HttpClient为webservice创建图层.

  1. 没有单一模式
  2. 单身模式

一种方法中,我在移动应用程序发出的每个新请求中创建新的http客户端对象.

这是我的代码

  public HttpClient GetConnection()
        {

            HttpClient httpClient = new HttpClient();
            httpClient.BaseAddress = new Uri(baseAddress); 
            httpClient.Timeout = System.TimeSpan.FromMilliseconds(timeout);


            return httpClient;

        }
Run Code Online (Sandbox Code Playgroud)

发布请求代码

 public async Task<TResult> PostAsync<TRequest, TResult>(String url, TRequest requestData)
        {
            HttpClient client = GetConnection();
            String responseData = null;
            if (client != null)
            {

                String serializedObject = await Task.Run(() => JsonConvert.SerializeObject(requestData, _jsonSerializerSettings));
                var jsonContent = new StringContent(serializedObject, System.Text.Encoding.UTF8, "application/json");
                HttpResponseMessage response = await client.PostAsync(new Uri(url, UriKind.Relative), jsonContent);
                responseData = await HandleResponse(response);


                return await …
Run Code Online (Sandbox Code Playgroud)

c# design-patterns httpclient xamarin

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