POST登录中必须要Setrequest set headerHeader哪些内容

HttpClient 4.0的使用详解
-------------
新增文件夹...
新增文件夹
(多个标签用逗号分隔)
HttpClient程序包是一个实现了 HTTP协议的客户端编程工具包,要想熟练的掌握它,必须熟悉 HTTP协议。对于HTTP协议来说,无非就是用户请求数据,服务器端响应用户请求,并将内容结果返回给用户。HTTP1.1由以下几种请求组成:GET,HEAD, POST, PUT, DELETE, TRACE ,OPTIONS,因此对应到HttpClient程序包中分别用HttpGet,HttpHead, HttpPost, HttpPut, HttpDelete, HttpTrace, HttpOptions 这几个类来创建请求。所有的这些类均实现了HttpUriRequest接口,故可以作为execute的执行参数使用。
l& HTTP请求
当然在所有请求中最常用的还是GET与POST两种请求,创建请求的方式如下:&
HttpUriRequest request = newHttpPost("http://localhost/index.html");
HttpUriRequest request = newHttpGet(“”);
HTTP请求格式告诉我们,有两种方式可以为request提供参数:request-line方式与request-body方式。
?& request-line方式是指在请求行上通过URI直接提供参数。
(1)可以在生成request对象时提供带参数的URI,如:
HttpUriRequest request = newHttpGet("http://localhost/index.html?param1=value1&param2=value2");
(2)HttpClient程序包还提供了URIUtils工具类,可以通过它生成带参数的URI,如:&
URI uri =URIUtils.createURI("http", "localhost", -1,"/index.html",
&&&"param1=value1&param2=value2", null);
HttpUriRequest request = newHttpGet(uri);
System.out.println(request.getURI());
上例的实例结果如下:
&http://localhost/index.html?param1=value1&param2=value2
(3)需要注意的是,如果参数中含有中文,需将参数进行URLEncoding处理,如:
&String param ="param1=" + URLEncoder.encode("中国", "UTF-8") +"&param2=value2";
URI uri =URIUtils.createURI("http", "localhost", 8080,"/sshsky/index.html",param, null);
System.out.println(uri);
&上例的实例结果如下:
&&http://localhost/index.html?param1=%E4%B8%AD%E5%9B%BD&param2=value2
(4)对于参数的URLEncoding处理,HttpClient程序包为我们准备了另一个工具类:URLEncodedUtils。通过它,我们可以直观的(但是比较复杂)生成URI,如:
List params = newArrayList();
params.add(newBasicNameValuePair("param1", "中国"));
params.add(newBasicNameValuePair("param2", "value2"));
String param =URLEncodedUtils.format(params, "UTF-8");
URI uri =URIUtils.createURI("http", "localhost", 8080,"/sshsky/index.html",param, null);
System.out.println(uri); &上例的实例结果如下:
?& request-body方式是指在请求的request-body中提供参数
与 request-line方式不同,request-body方式是在request-body中提供参数,此方式只能用于进行POST请求。在HttpClient程序包中有两个类可以完成此项工作,它们分别是UrlEncodedFormEntity类与MultipartEntity类。这 两个类均实现了HttpEntity接口。
(1)UrlEncodedFormEntity类,故名思意该类主要用于form表单提交。通过该类创建的对象可以模拟传统的HTML表单传送POST请求中的参数。如下面的表单:
&formaction="http://localhost/index.html" method="POST"&
&inputtype="text" name="param1" value="中国"/&
&inputtype="text" name="param2" value="value2"/&
&inupttype="submit" value="submit"/&
&/form& 即可以通过下面的代码实现:
List formParams = newArrayList();
formParams.add(newBasicNameValuePair("param1", "中国"));
formParams.add(newBasicNameValuePair("param2", "value2"));
HttpEntity entity = newUrlEncodedFormEntity(formParams, "UTF-8");
HttpPost request = newHttpPost(“http://localhost/index.html”);
request.setEntity(entity); &当然,如果想查看HTTP数据格式,可以通过HttpEntity对象的各种方法取得。如:
List formParams = newArrayList();
formParams.add(newBasicNameValuePair("param1", "中国"));
formParams.add(newBasicNameValuePair("param2", "value2"));
UrlEncodedFormEntity entity =new UrlEncodedFormEntity(formParams, "UTF-8");
System.out.println(entity.getContentType());
System.out.println(entity.getContentLength());
System.out.println(EntityUtils.getContentCharSet(entity));
System.out.println(EntityUtils.toString(entity)); 上例的实例结果如下:
&&&Content-Type: application/x-www-form- charset=UTF-8
&&&param1=%E4%B8%AD%E5%9B%BD&param2=value2&
(2)除了传统的application/x-www-form-urlencoded表单,还有另一个经常用到的是上传文件用的表单,这种表单的类型为 multipart/form-data。在HttpClient程序扩展包(HttpMime)中专门有一个类与之对应,那就是MultipartEntity类。此类同样实现了HttpEntity接口。如下面的表单:
&formaction="http://localhost/index.html" method="POST"
enctype="multipart/form-data"&
&inputtype="text" name="param1" value="中国"/&
&inputtype="text" name="param2" value="value2"/&
&inputtype="file" name="param3"/&
&inupttype="submit" value="submit"/&
&/form& 可以用下面的代码实现:
MultipartEntity entity = newMultipartEntity();
entity.addPart("param1",new StringBody("中国", Charset.forName("UTF-8")));
entity.addPart("param2",new StringBody("value2", Charset.forName("UTF-8")));
entity.addPart("param3",new FileBody(new File("C:\\1.txt")));
HttpPost request = newHttpPost(“http://localhost/index.html”);
request.setEntity(entity); l& HTTP响应&
HttpClient 程序包对于HTTP响应的处理较请求来说简单多了,其过程同样使用了HttpEntity接口。我们可以从HttpEntity对象中取出数据流(InputStream),该数据流就是服务器返回的响应数据。需要注意的是,HttpClient程序包不负责 解析数据流中的内容。如:
HttpUriRequest request = ...;
HttpResponse response =httpClient.execute(request);
// 从response中取出HttpEntity对象
HttpEntity entity =response.getEntity();
// 查看entity的各种指标
System.out.println(entity.getContentType());
System.out.println(entity.getContentLength());
System.out.println(EntityUtils.getContentCharSet(entity));
// 取出服务器返回的数据流
InputStream stream =entity.getContent(); 或者采用如下的接口方式httpClient.execute(request,new ResponseHandler&T& response)进行调用,它的返回值直接对应的即为用户自己想获取的数据的类型及值。
具体实例解析,通过下述方法,即可获取到指定url的页面内容。
public static String executeStringByGet(String url, final Charset charset) {
String result = "";
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
result = client.execute(get, new ResponseHandler&String&() {
public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
HttpEntity entity = response.getEntity();
if(entity != null) {
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
return new String(EntityUtils.toByteArray(entity), charset.getValue());
return "";
} catch (Exception e) {
e.printStackTrace();
HttpClient接口的详细使用:
package mon.
import java.io.IOE
import java.util.regex.M
import java.util.regex.P
import org.apache.http.H
import org.apache.http.HttpE
import org.apache.http.HttpR
import org.apache.http.HttpS
import org.apache.http.client.ClientProtocolE
import org.apache.http.client.HttpC
import org.apache.http.client.methods.HttpG
import org.apache.http.impl.client.DefaultHttpC
import org.apache.http.util.EntityU
* 类HttpClientTest.java的实现描述:TODO 类实现描述
* @author zheng.zhaoz
下午07:33:18
public class HttpClientTest {
public static void main(String[] args) {
HttpClient httpClient = new DefaultHttpClient();
//創建一個httpGet方法
HttpGet httpGet = new HttpGet("/loveyakamoz/archive//2113252.html");
//設置httpGet的參數信息
httpGet.setHeader("Accept", "Accept text/html,application/xhtml+xml,application/q=0.9,*/*;q=0.8");
httpGet.setHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");
httpGet.setHeader("Accept-Encoding", "gzip, deflate");
httpGet.setHeader("Accept-Language", "zh-cn,q=0.5");
httpGet.setHeader("Connection", "keep-alive");
httpGet.setHeader("Cookie", "__utma=;");
httpGet.setHeader("Host", "");
httpGet.setHeader("refer", "/s?tn=monline_5_dg&bs=httpclient4+MultiThreadedHttpConnectionManager");
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/ Firefox/6.0.2");
System.out.println("Accept-Charset: " + httpGet.getFirstHeader("Accept-Charset"));
System.out.println("Execute request: " + httpGet.getURI());
HttpResponse response =
response = httpClient.execute(httpGet);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
//输出响应的所有头信息
if(response != null) {
Header headers[] = response.getAllHeaders();
int i = 0;
while (i & headers.length) {
System.out.println(headers[i].getName() + ":
" + headers[i].getValue());
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
// 将源码流保存在一个byte数组当中,因为可能需要两次用到该流
byte[] bytes = EntityUtils.toByteArray(entity);
String charSet = "";
// 如果头部Content-Type中包含了编码信息,那么我们可以直接在此处获取
charSet = EntityUtils.getContentCharSet(entity);
System.out.println("In header: " + charSet);
// 如果头部中没有,需要 查看页面源码,这个方法虽然不能说完全正确,因为有些粗糙的网页编码者没有在页面中写头部编码信息
if (charSet == "") {
String regEx="(?=&meta).*?(?&=charset=[\\'|\\\"]?)([[a-z]|[A-Z]|[0-9]|-]*)";
Pattern pile(regEx, Pattern.CASE_INSENSITIVE);
Matcher m=p.matcher(new String(bytes));
// 默认编码转成字符串,因为我们的匹配中无中文,所以串中可能的乱码对我们没有影响
boolean result = m.find();
if (m.groupCount() == 1) {
charSet = m.group(1);
charSet = "";
System.out.println("Last get: " + charSet);
// 可以将原byte数组按照正常编码专成字符串输出(如果找到了编码的话)
System.out.println("Encoding string is: " + new String(bytes, charSet));
} catch (IOException e) {
e.printStackTrace();
//關閉聯接
httpClient.getConnectionManager().shutdown();
相关资讯  — 
相关文档  — 
发布时间1: 08:41:36
同类热门经验
30643次浏览
36264次浏览
17168次浏览
16599次浏览
22810次浏览
24039次浏览
OPEN-OPEN, all rights reserved.xhr.setRequestHeader is not working in Firefox but working in IE? [xhr.setrequestheader不工作在Firefox但工作在IE?] - 问题-字节技术
xhr.setRequestHeader is not working in Firefox but working in IE?
xhr.setrequestheader不工作在Firefox但工作在IE?
问题 (Question)
Here i am passing a http request header value through jquery ajax call..It is working only with IE and not working in Firefox.The
ajax call itself is not happening in firefox when
xhr.setRequestHeader is there in the code
var Call = function () {
$.support.cors =
var input = {
RefId: "111", LoginId: "222", Id: "33", FirstName: "aaa", LastName: "bbb"
var url = document.URL;
type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader("URL", url);
url: "http://localhost:40780/Service.svc/Insertion",
data: JSON.stringify(Input),
contentType: "application/json",
dataType: "json",
success: function (response) {
alert(response);
error: function (xhr, status, error) {
Any suggestion?
我在这里通过一个HTTP请求标头值通过jQuery的Ajax调用..只有用IE的工作和不工作在Firefox。Ajax调用本身是不是Firefox发生时xhr.setRequestHeader有没有在代码var Call = function () {
$.support.cors =
var input = {
RefId: "111", LoginId: "222", Id: "33", FirstName: "aaa", LastName: "bbb"
var url = document.URL;
type: "POST",
beforeSend: function (xhr) {
xhr.setRequestHeader("URL", url);
url: "http://localhost:40780/Service.svc/Insertion",
data: JSON.stringify(Input),
contentType: "application/json",
dataType: "json",
success: function (response) {
alert(response);
error: function (xhr, status, error) {
任何建议?
最佳答案 (Best Answer)
Well I guess the reason could be found here, by the way client and server handle CORS and preflight requests :
CORS from JQuery
JQuery's $.ajax() method can be used to make both regular XHR and CORS
requests. A few notes about JQuery's implementation:
JQuery's CORS implementation doesn't support IE's XDomainRequest object. But there are JQuery plugins that enable this. See
for details.
The $.support.cors boolean will be set to true if the browser supports CORS (This returns false in IE, see bullet above). This can
be a quick way to check for CORS support.
headers: {
// Set any custom headers here.
// If you set any non-simple headers, your server must include these
// headers in the 'Access-Control-Allow-Headers' response header.
Hope this will help
我想原因可能是在这里找到,通过客户端和服务器处理请求的CORS和预检: CORS从jQuery jQuery的$。ajax()方法可以用来做定期XHR和CORS 请求。jQuery实现的几点注意事项: jQuery的CORS实现不支持IE的xdomainrequest对象。但有jQuery插件,使这。看到详情。美元。support.cors布尔将真正的浏览器是否支持将CORS(返回假IE,看到子弹上面。这是一个快速的方法来检查 CORS支持。
headers: {
// Set any custom headers here.
// If you set any non-simple headers, your server must include these
// headers in the 'Access-Control-Allow-Headers' response header.
希望这将帮助
本文翻译自StackoverFlow,英语好的童鞋可直接参考原文:ajax的post方式,要加上setRequestHeader(
)这个表达式?
ajax的post方式,要加上setRequestHeader(
)这个表达式?
昵称: cutemurphy &时间:
昵称: jordan102 &时间:
昵称: lsw &时间:
昵称: cutemurphy &时间:
昵称: aspwebchh &时间:
昵称: cutemurphy &时间:35744人阅读
JavaScript(56)
新加:设置编码方法
setRequestHeader(&Content-Type&,&application/x-www-form- charset=gb2312&)&&
oXMLHttpRequest.setRequestHeader(bstrHeader, bstrValue);
bstrHeader 字符串,头名称。
bstrValue 字符串,值。
还是不很明白
1、XMLObject.setRequestHeader &CONTENT-TYPE&, &application/x-www-form-urlencoded&
CONTENT-TYPE是什么意思,application/x-www-form-urlencoded是什么意思?
2、下面几句setRequestHeader的含义?
setRequestHeader(&Content-type&, &application/x-www-form-urlencoded&);&
setRequestHeader(&Content-length&, paramsSend.length);&
setRequestHeader(&Connection&, &close&);
通常在HTTP协议里,客户端像服务器取得某个网页的时候,必须发送一个HTTP协议的头文件,&
告诉服务器客户端要下载什么信息以及相关的参数,如:&
GET /bb.asp?www=1234 HTTP/1.1&
Accept: */*&
Accept-Language: zh-cn&
UA-CPU: x86&
Accept-Encoding: gzip, deflate&
User-Agent: Mozilla/4.0 ( MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)&
Host: :89&
Connection: Keep-Alive&
Cookie: %C3%F7%CC%EC=%B0%CB;ASPSESSIONIDASDBSDRR=BLEDBIBBCGKBJAKJCFEJKGII
而 XMLHTTP 就是通过HTTP协议取得网站上的文件数据的,所以也要发送HTTP头给服务器。&
但是 XMLHTTP 默认的情况下有些参数可能没有说明在HTTP头里,这是当我们需要修改或添加这些参数时就用到了
setRequestHeader 方法。
就比如如果上面这段HTTP头文件内容是 XMLHTTP 提交默认的情况,当使用 setRequestHeader 方法后就这样,如:&
XMLObject.setRequestHeader &CONTENT-TYPE&, &application/x-www-form-urlencoded&&
setRequestHeader &Connection&, &close&&
这时HTTP头信息就应该是这样了:&
GET /bb.asp?www=1234 HTTP/1.1&
Accept: */*&
Accept-Language: zh-cn&
UA-CPU: x86&
Accept-Encoding: gzip, deflate&
User-Agent: Mozilla/4.0 ( MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)&
CONTENT-TYPE:application/x-www-form-urlencoded&
Host: :89&
Connection:&close&
Cookie: %C3%F7%CC%EC=%B0%CB;ASPSESSIONIDASDBSDRR=BLEDBIBBCGKBJAKJCFEJKGII
setRequestHeader方法只是XMLHTTP为添加或修改HTTP头提供的一个接口方法而已,&
至于里面的值则是HTTP协议的含义,当然也可以发自己的东西进去,即使IIS不能识别你的信息也不会报错
如: setRequestHeader &MyName&, &Supermanking&
虽然IIS不会报错,但这个信息也可以有用,可以在ASP程序里读取HTTP头信息分析是否有&
MyName: Supermanking 信息,可根据你的需求来做处理,还有,CONTENT-TYPE:application/x-www-form-urlencoded含义是表示客户端提交给服务器文本内容的编码方式是URL编码,即除了标准字符外,每字节以双字节16进制前加个“%”表示
当然还有其他编码方式,如:CONTENT-TYPE:multipart/form-data
至于:Content-length 就是表示提交的数据字节大小&
http有几种提交方式,其中比较常用的就是 GET 和 POST&
这个标志就放在HTTP头开头的地方,这样讲容易理解点&
GET 方式是没有提交内容的,所以 Content-length 在 GET 模式下是无效的.&
GET 传参数的方式就是通过虚拟地址传送,如:&
GET /bb.asp?www=1234 HTTP/1.1&
参数全部就只有 &www=1234& 这么多
如果用POST的话就有些不同,POST是将参数放到HTTP后面的,就以上面的HTTP作范例,用POST的方法传参数&
POST /bb.asp HTTP/1.1&
Accept: */*&
Accept-Language: zh-cn&
UA-CPU: x86&
Accept-Encoding: gzip, deflate&
User-Agent: Mozilla/4.0 ( MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)&
CONTENT-TYPE:application/x-www-form-urlencoded&
Host: :89&
Content-length: 8&
Connection: close&
Cookie: %C3%F7%CC%EC=%B0%CB;ASPSESSIONIDASDBSDRR=BLEDBIBBCGKBJAKJCFEJKGII&
这时,数据就需要说明字节大小了&
至于 Connection: Close,很明显英文的意思是 连接:关闭&
只是客户端在提交数据时告诉服务器让谁先关闭连接而已。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1203422次
积分:14679
积分:14679
排名:第421名
原创:336篇
转载:235篇
评论:171条
阅读:12029
阅读:6021
(1)(1)(3)(4)(1)(2)(2)(3)(2)(2)(3)(6)(2)(7)(4)(6)(2)(1)(4)(3)(1)(13)(8)(2)(6)(5)(20)(9)(3)(2)(16)(27)(6)(23)(11)(12)(16)(14)(45)(39)(42)(16)(24)(1)(2)(3)(2)(9)(21)(10)(24)(69)(11)ajax post方式表单提交setRequestHeader报错解决方法
投稿:whsnow
字体:[ ] 类型:转载 时间:
ajax post方式表单提交设置异步对象的xhr.setRequestHeader,在谷歌浏览器的编译器中显示传值在Request Payload中这是错误的
当我们创建一个异步对象XMLHttpRequest同时post方式向后台传输数据的时候。
我们要设置异步对象的xhr.setRequestHeader成员的值为
XMLHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");否则的话后台是不能接收到传过去的值的。因为在谷歌浏览器的编译器中显示,传值在Request Payload中,这是错误的(如图) --属性注意看
而正确的方式是在 Form Data 中(如图)
这个设置在form表单中的enctype属性(规定在发送到服务器之前应该如何对表单数据进行编码。一共有三种形式,可参考w3c文档)也是有得到体现的、
例如:&form enctype="application/x-www-form-urlencoded"&&/form&
jquery 里面有一个方法serialize() 方法 。。可以将参数一窝端。变成 id="值"&name="值" 的方式
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 httppost.setheader 的文章

 

随机推荐