当前位置: 首页 > 知识库问答 >
问题:

使用Apache HttpClient的Java HTTPPost请求

邹涵畅
2023-03-14

我需要一个java程序来生成以下请求。我正在使用Apache HttpClient Library,但仍然无法生成这样的请求:

这是我的python程序生成的,我编写了一个等效的java程序。但它扔403。

2012-09-10 15:12:05G信息:G2OAuth auth data=“3,0.0.0,0.0.0,1347289925,3223833979,crlakamai”2012-09-10 15:12:05G信息:G2OAuth sign string=“3,0.0.0,0.0.0,1347289925,3223833979,akamai/182228\nx akamai acs操作:版本=1

   send: 'POST /182228 HTTP/1.1\r\nHost: crl.api.akamailab.com\r\nAccept-Encoding: identity\r\nX-Akamai-ACS-Auth-Data: 3, 0.0.0.0, 0.0.0.0, 1347289925, 3223833979, crlsymc\r\nX-Akamai-ACS-Auth-Sign: eFnWtJBIyj4rxV3V0axF3w==\r\nX-Akamai-ACS-Action: version=1&action=dir&format=xml\r\n\r\n'

reply: 'HTTP/1.1 200 OK\r\n'
header: Server: Apache
header: Content-Type: text/html
header: Date: Mon, 10 Sep 2012 15:12:09 GMT
header: Content-Length: 31
header: Connection: keep-alive

响应如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>
<stat directory="/182232">
        <file type="file" name="log4j.properties" mtime="1346780907" size="301" md5="c92268157f1732a05c2027d151fc539a"/>
</stat>

这是我的Java代码:

    final HttpHost targetHost = new HttpHost("a.host.com", 80, "http");
    final DefaultHttpClient httpClient = new DefaultHttpClient();
    final Credentials credentials = new UsernamePasswordCredentials("user","pass");
    httpClient.getCredentialsProvider().setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), credentials);


    final HttpPost httpPostRequest = new HttpPost("akamai/182232");

    //Add your Data
    final List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(6);
    nameValuePairs.add(new BasicNameValuePair("Host: ", "a.host.com");
    nameValuePairs.add(new BasicNameValuePair("Accept-Encoding: ", "identity"));
    nameValuePairs.add(new BasicNameValuePair("Content-Length: ", "6"));

    httpPostRequest.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    final HttpResponse response = httpClient.execute(targetHost, httpPostRequest);

    if (response.getStatusLine().getStatusCode() != 200) {
        throw new RuntimeException("Failed : HTTP error code : " + response.getStatusLine().getStatusCode());
    }

我的回答是这样的。

2012-09-10 11:31:22,600 DEBUG [wire] >> "POST /182228/a.crl HTTP/1.1[\r][\n]"
2012-09-10 11:31:22,601 DEBUG [wire] >> "Content-Length: 394[\r][\n]"
2012-09-10 11:31:22,601 DEBUG [wire] >> "Content-Type: application/x-www-form-urlencoded; charset=ISO-8859-1[\r][\n]"
2012-09-10 11:31:22,601 DEBUG [wire] >> "Host: crl.api.symclab.com:80[\r][\n]"
2012-09-10 11:31:22,601 DEBUG [wire] >> "Connection: Keep-Alive[\r][\n]"
2012-09-10 11:31:22,601 DEBUG [wire] >> "User-Agent: Apache-HttpClient/4.1.3 (java 1.5)[\r][\n]"
2012-09-10 11:31:22,602 DEBUG [wire] >> "[\r][\n]"

我想接受将另一个标题编码为帖子的一部分,我该如何添加它们?我相信它必须是post请求的一部分,而不是http头。

共有2个答案

水焱
2023-03-14

如果您想更改Http标头接受编码,您可以这样更改

httpPostRequest.setHeader("Accept-Encoding", "identity");

您的代码

final List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(6);
nameValuePairs.add(new BasicNameValuePair("Host: ", "a.host.com");
nameValuePairs.add(new BasicNameValuePair("Accept-Encoding: ", "identity"));
nameValuePairs.add(new BasicNameValuePair("Content-Length: ", "6"));

httpPostRequest.setEntity(new UrlEncodedFormEntity(nameValuePairs));

用于发送超文本传输协议请求正文中的值对,不在头部

傅献
2023-03-14

接受编码是HTTP标头的一部分,除了您错误地作为POST参数发送的参数:

下面是如何使用HTTP客户端发送它:

httpPostRequest.setHeader("Content-Length", "6"); 
httpPostRequest.setHeader("Accept-Encoding", "identity"); 
httpPostRequest.setHeader("Host", "a.host.com");
 类似资料:
  • 我想做的是用httpclient下载一个文件。目前我的代码如下。 我的下载URL如下所示:http://example.com/file/afz938f348dfa3 正如你可以看到没有扩展名的文件(至少在网址)然而,当我去一个正常的浏览器网址,它下载文件asdasdaasda.txt或asdasdasdsd.pdf(名称是不同的url和extenstion并不总是相同的,取决于我试图下载什么)。

  • 我的Java代码使用共享的ApacheHttpClient 4.4。1.我将每个POST请求级别上的连接超时、套接字超时和连接请求超时设置为100毫秒。它大部分时间都很好用。然而,在大量请求(压力测试)时,HttpClient忽略这些超时;请求可能需要20秒或更长时间。这是我的密码: 在某些情况下,我会得到如下日志记录: 2018-10-26 14:18:45496[my-thread-1]调试c

  • 我试图使用HttpClient将“Accept Encoding”参数添加到我的HTTP头中,如“gzip,deflate”。代码如下所示。但是,我在响应中遇到以下错误,无法添加header参数。响应不包含添加的标题字段 错误:内部服务器错误

  • 嗨,有人能帮我吗。 如何请求soapweb服务并获取xml响应。Senario:使用SOAPUIIM发送带有用户名、密码身份验证的wsdl url,我还将发送SOAPXML数据并获得响应。如何使用nodejs或sails实现同样的目标。 在SoapUi中,我的soapxml请求如下 我的Soap身份验证就像 $UserName:xyz 我的wsdl url是http://esbuatt1wm.it

  • 我正在研究我们公司开发的一个应用程序。它使用Apache HttpClient库。在源代码中,它使用类来创建连接到服务器的实例。 我想了解ApacheHttpClient,我已经详细介绍了这组示例。所有示例都使用而不是。因此我认为是的扩展版本。如果是这种情况,我有两个问题: 这两者有什么区别? 我的新开发建议使用哪个类?

  • 问题内容: 我正在尝试通过javascript发布到我的 跨域 * 休息服务 *,并且意识到除非我使用此规范,否则这是不可能的; http://www.w3.org/wiki/CORS_Enabled 但是,关于如何实现此功能的文档非常有限,我有几个问题; 1-我使用 Glassfish Jee6 应用服务器,所以我可以简单地在我的web.xml中添加一个 码头 过滤器并完成工作吗? 2-并且对于

  • 我试图使用HttpURLConnection执行post请求,但不知道如何正确执行。 我可以使用以下代码成功地使用Android AsyncHttp客户端执行请求: 可以在台式机上使用curl执行相同的请求: 这两种方法都给了我来自服务器的预期响应。 现在我想使用HttpURLConntions执行相同的请求。问题是我不知道如何正确地执行它。我尝试过这样的事情: 如何正确地将与使用AsyncHtt

  • 问题内容: 我正在使用djang-tastypie作为后端和AngularJs作为前端的API。我正在使用angularjs $ http从CRUD发送请求。GET,POST,PUT一切都很好,但是当我尝试发送PATCH请求时,出现错误,未定义PATCH方法。我已经在angular中创建了一个api调用工厂,但是PATCH请求在那里不起作用。 这是我的HTML代码 当我在控制台中使用此代码发送路径