为什么http的put方法禁用以后使用curl http put验证时依然有这个问题

问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
PUT请求该如何传输请求参数呢?
有如下的接口
@RequestMapping(value = "testPut", method = RequestMethod.PUT)
public Result&Void& testPut(@RequestParam String foo, @RequestParam String bar) {
System.out.println(foo + " " + bar) ;
return Result.success(null);
通过CURL来调用该接口
# 通过-d传输请求参数失败
curl -X PUT
-d "foo=foo&bar=bar" 'http://localhost:8080/testPut'
org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'foo' is not present
# 但直接放在url后面是可以的
curl -X PUT
'http://localhost:8080/testPut?foo=foo&bar=bar'
但我想像POST一样 以请求体的方式传输请求参数, 而不是作为URL的一部分
现在我的方法是
@RequestMapping(value = "testPut2", method = RequestMethod.PUT)
public Result&Void& testPut2(@RequestBody FooBar fooBar) {
System.out.println(fooBar) ;
return Result.success(null);
static class FooBar{
然后以json的方式调用
curl -X PUT
-H "Content-Type: application/json" -d '{"foo":"foo","bar":"bar"}' 'http://localhost:8080/testPut2'
这样是可以的 但奇怪为什么PUT只能接收json呢?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
我是可以的,Spring 4.3。你是啥版本?
另外加下Content-type试试
curl -H 'Content-type: application/x-www-form-urlencoded' -X PUT -d 'foo=foo&bar=bar' localhost:8080/testPut
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
对于表单提交,tomcat默认只解析POST的表单,对于PUT和DELETE的不处理,所以Spring拿不到。解决方案:1、修改tomcat的server.xml:
&Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
parseBodyMethods="POST,PUT,DELETE"
URIEncoding="UTF-8" /&
解决方案2、在web.xml中添加HttpPutFormContentFilter
&!--Servlet不支持PUT表单,需要Spring支持--&
&filter-name&httpPutFormContentFilter&/filter-name&
&filter-class&org.springframework.web.filter.HttpPutFormContentFilter&/filter-class&
&filter-mapping&
&filter-name&httpPutFormContentFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
http的put方法是没有请求参数的(请看http协议,我也因为不知道这个被鄙视了),所以spring对put的请求参数默认是不解析的,你可以用spring的putform....filter(忘了叫什么了。。)来实现对put的解析
该答案已被忽略,原因:
同步到新浪微博
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 AppRestTemplate用法-java,http,curl,put,resttemplate-CodeGo.net
RestTemplate用法
我想RestTemplate为了使一PUT。对于原因,我无法重现PUT我curl那经历没有任何问题。
这里是我的curl调用并返回200:
CodeGo.net
-H "Content-Type: application/json" \
-H "Authorization: Bearer &bearer-token&" \
-d '{"json":"object"}'
这里是Java代码试图复制这种curl打电话。在我的情况下,这段代码将抛出HttpClientErrorException与=406:
boolean result =
String url = " CodeGo.net
String json = "{\"json\":\"object\"}";
RestTemplate rest = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
headers.add("Authorization", String.format("Bearer %s", authToken));
HttpEntity&String& requestEntity = new HttpEntity&String&(json, headers);
ResponseEntity&String& responseEntity =
rest.exchange(url, HttpMethod.PUT, requestEntity, String.class);
HttpStatus status = responseEntity.getStatusCode();
什么是这些请求之间的区别?我该如何衔接的Java版本的curl版本?
本文地址 :CodeGo.net/556929/
-------------------------------------------------------------------------------------------------------------------------
1. Agghr,如此愚蠢。缺少的部分是Accept头。显然地curl补充Accept: */*在默认情况下。这可能是正确的预期端点Accept头。加入这一行解决了这个问题:
headers.add("Accept", "*/*");
本文标题 :RestTemplate用法
本文地址 :CodeGo.net/556929/
Copyright (C) 2017 CodeGo.net(转)php&curl使用方法
cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。PHP提供了对cURL
库的支持。
1. 为什么使用cURL
为了获取网页内容,我们当然可以使用file_get_contents、&file、readfile等函数,但它们缺乏灵活性和有效的错误处理。而且,也不能完成一些高难度任务—如处理coockies、验证、表单提交、文件上传等。PHP获取网页内容的更多方法:
2. PHP中建立cURL请求的基本步骤
执行并获取结果
释放cURL句柄
// 1. 初始化&
$ch&=&curl_init&(&)&;&
// 2. 设置选项,包括URL&
curl_setopt&(&$ch&,&CURLOPT_URL,&""&)&;&
curl_setopt&(&$ch&,&CURLOPT_RETURNTRANSFER,&1&)&;&
curl_setopt&(&$ch&,&CURLOPT_HEADER,&0&)&;&
// 3. 执行并获取HTML文档内容&
$output&=&curl_exec&(&$ch&)&;&
// 4. 释放curl句柄&
curl_close&(&$ch&)&;
CURLOPT_URL:目标URL
CURLOPT_PORT:目标端口
CURLOPT_RETURNTRANSFER:把输出转化为字符串,而不是直接输出到屏幕
CURLOPT_HTTPHEADER:请求头信息,参数是一数组,如“基于浏览器的重定向”例子所示
CURLOPT_FOLLOWLOCATION: 跟随重定向
CURLOPT_FRESH_CONNECT:强制重新获取内容,而不是从缓存
CURLOPT_HEADER:包含头部
CURLOPT_NOBODY:输出中不包含网页主体内容
CURLOPT_POST:进行post表单提交
CURLOPT_POSTFIELDS:POST提交的字段,参数是一数组,如“&用POST方法发送数据&”所示
CURLOPT_PROXY:代理设置,IP 和 端口
CURLOPT_PROXYUSERPWD:代理设置,用户名和密码
CURLOPT_PROXYTYPE:代理类型,http 或 socket
更多选项:
3.检查错误
$output&=&curl_exec&(&$ch&)&;&
if&(&$output&===&FALSE&)&{&
&&&&echo&"cURL
"&.&curl_error&(&$ch&)&;&
4.获取信息
&curl_exec&(&$ch&)&;&
$info&=&curl_getinfo&(&$ch&)&;&
echo&'获取'&.&$info&[&'url'&]&.&'耗时'&.&$info&[&'total_time'&]&.&'秒'&;
返回的数组中包括了以下信息:
“url” //资源网络地址
“content_type” //内容编码
“http_code” //HTTP状态码
“header_size” //header的大小
“request_size” //请求的大小
“filetime” //文件创建时间
“ssl_verify_result” //SSL验证结果
“redirect_count”
//跳转技术&&
“total_time” //总耗时
“namelookup_time” //DNS查询耗时
“connect_time” //等待连接耗时
“pretransfer_time” //传输前准备耗时
“size_upload” //上传数据的大小
“size_download” //下载数据的大小
“speed_download” //下载速度
“speed_upload” //上传速度
“download_content_length”//下载内容的长度
“upload_content_length”
//上传内容的长度&&
“starttransfer_time” //开始传输的时间
“redirect_time”//重定向耗时
5.基于浏览器的重定向
在第一个例子中,我们将提供一段用于侦测服务器是否有基于浏览器的重定向的代码。例如,有些网站会根据是否是手机浏览器甚至用户来自哪个国家来重定向网页。
我们利用 CURLOPT_HTTPHEADER 选项来设定我们发送出的HTTP请求头信息(http
headers),包括user
agent信息和默认语言。然后我们来看看这些特定网站是否会把我们重定向到不同的URL。&
// 测试用的URL&
$urls&=&array&(&
&&&&"n.com"&,&
// 测试用的浏览器信息&
$browsers&=&array&(&
&&&&"standard"&=&&array&(&
&&&&&&&&"user_agent"&=&&"Mozilla/5.0
(W U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/
Firefox/3.5.6 (.NET CLR
3.5.30729)"&,
&&&&&&&&"language"&=&&"en-us,q=0.5"&
&&&&&&&&)&,&
&&&&"iphone"&=&&array&(&
&&&&&&&&"user_agent"&=&&"Mozilla/5.0
(iP U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like
Gecko) Version/3.0 Mobile/1A537a
Safari/419.3"&,
&&&&&&&&"language"&=&&"en"&
&&&&&&&&)&,&
&&&&"french"&=&&array&(&
&&&&&&&&"user_agent"&=&&"Mozilla/4.0
( MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR
2.0.50727)"&,
&&&&&&&&"language"&=&&"fr,fr-FR;q=0.5"&
&&&&&&&&)&
foreach&(&$urls&as&$url&)&{&
&&&&echo&"URL:&$url&/n&"&;&
&&&&foreach&(&$browsers&as&$test_name&=&&$browser&)&{&
&&&&&&&&$ch&=&curl_init&(&)&;&
&&&&&&&&//
&&&&&&&&curl_setopt&(&$ch&,&CURLOPT_URL,&$url&)&;&
&&&&&&&&//
设置浏览器的特定header&
&&&&&&&&curl_setopt&(&$ch&,&CURLOPT_HTTPHEADER,&array&(&
&&&&&&&&&&&&&&&&"User-Agent:&{$browser['user_agent']}&"&,&
&&&&&&&&&&&&&&&&"Accept-Language:&{$browser['language']}&"&
&&&&&&&&&&&&)&)&;&
&&&&&&&&//
页面内容我们并不需要&
&&&&&&&&curl_setopt&(&$ch&,&CURLOPT_NOBODY,&1&)&;&
&&&&&&&&//
只需返回HTTP header&
&&&&&&&&curl_setopt&(&$ch&,&CURLOPT_HEADER,&1&)&;&
&&&&&&&&//
返回结果,而不是输出它&
&&&&&&&&curl_setopt&(&$ch&,&CURLOPT_RETURNTRANSFER,&1&)&;&
&&&&&&&&$output&=&curl_exec&(&$ch&)&;&
&&&&&&&&curl_close&(&$ch&)&;&
&&&&&&&&//
有重定向的HTTP头信息吗?&
&&&&&&&&if&(&preg_match&(&"!Location:
(.*)!"&,&$output&,&$matches&)&)&{&
&&&&&&&&&&&&echo&"$test_name&:
to&$matches[1]&/n&"&;&
&&&&&&&&}&else&{&
&&&&&&&&&&&&echo&"$test_name&:
redirection/n&"&;&
&&&&&&&&}&
&&&&echo&"/n&/n&"&;&
首先,我们建立一组需要测试的URL,接着指定一组需要测试的浏览器信息。最后通过循环测试各种URL和浏览器匹配可能产生的情况。
因为我们指定了cURL选项,所以返回的输出内容则只包括HTTP头信息(被存放于 $output
中)。利用一个简单的正则,我们检查这个头信息中是否包含了“Location:”字样。
运行这段代码应该会返回如下结果:&
6. 用POST方法发送数据
借此我们可以实现表单提交的效果。
表单提交有get和post两种方式,对于get方式我们可以直接生成URL用file_get_content等函数直接获取内容;但对于post方式,数据是通过
HTTP请求体(request body)发送,而不是查询字串,用这类函数就不可以了。
首先,制作一个接收页面(action),post_output.php,内容为:print_r($_POST);
即可。即把POST数组直接输出。
然后,编写我们用cURL来以post方式提交数据
$url&=&"http://localhost/post_output.php"&;&
$post_data&=&array&(&
&&&&"foo"&=&&"bar"&,&
&&&&"query"&=&&"Nettuts"&,&
&&&&"action"&=&&"Submit"&
$ch&=&curl_init&(&)&;&
curl_setopt&(&$ch&,&CURLOPT_URL,&$url&)&;&
curl_setopt&(&$ch&,&CURLOPT_RETURNTRANSFER,&1&)&;&
// 我们在POST数据哦!&
curl_setopt&(&$ch&,&CURLOPT_POST,&1&)&;&
// 把post的变量加上&
curl_setopt&(&$ch&,&CURLOPT_POSTFIELDS,&$post_data&)&;&
$output&=&curl_exec&(&$ch&)&;&
curl_close&(&$ch&)&;&
echo&$output&;&&
这段脚本发送一个POST请求给 post_output.php ,该页面接收并输出$_POST
变量,我们利用cURL捕捉了这个输出。
7.&文件上传
上传文件和前面的POST十分相似。因为所有的文件上传表单都是通过POST方法提交的。
首先新建一个接收文件的页面,命名为 upload_output.php,内容为:print_r($_FILES);
以下是真正执行文件上传任务的脚本:
$url&=&"http://localhost/upload_output.php"&;&
$post_data&=&array&(&
&&&&"foo"&=&&"bar"&,&
要上传的本地文件地址&
&&&&"upload"&=&&"@C:/wamp/www/test.zip"&
$ch&=&curl_init&(&)&;&
curl_setopt&(&$ch&,&CURLOPT_URL,&$url&)&;&
curl_setopt&(&$ch&,&CURLOPT_RETURNTRANSFER,&1&)&;&
curl_setopt&(&$ch&,&CURLOPT_POST,&1&)&;&
curl_setopt&(&$ch&,&CURLOPT_POSTFIELDS,&$post_data&)&;&
$output&=&curl_exec&(&$ch&)&;&
curl_close&(&$ch&)&;&
echo&$output&;
如果你需要上传一个文件,只需要把文件路径像一个post变量一样传过去,不过记得在前面加上@符号。执行这段脚本应该会得到如下输出
8. cURL批处理
cURL还有一个高级特性——批处理句柄(handle)。这一特性允许你同时或异步地打开多个URL连接。
这里要做的就是打开多个cURL句柄并指派给一个批处理句柄。然后你就只需在一个while循环里等它执行完毕。
// 创建两个cURL资源&
$ch1&=&curl_init&(&)&;&
$ch2&=&curl_init&(&)&;&
// 指定URL和适当的参数&
curl_setopt&(&$ch1&,&CURLOPT_URL,&"&a
href="&http:&//lxr.php.net/"&http://lxr.php.net/&/a&");&
curl_setopt&(&$ch1&,&CURLOPT_HEADER,&0&)&;&
curl_setopt&(&$ch2&,&CURLOPT_URL,&"&a
href="&http:&//www.php.net/"&http://www.php.net/&/a&");&
curl_setopt&(&$ch2&,&CURLOPT_HEADER,&0&)&;&
// 创建cURL批处理句柄&
$mh&=&curl_multi_init&(&)&;&
// 加上前面两个资源句柄&
curl_multi_add_handle&(&$mh&,&$ch1&)&;&
curl_multi_add_handle&(&$mh&,&$ch2&)&;&
// 预定义一个状态变量&
$active&=&null&;&
// 执行批处理&
&&&&$mrc&=&curl_multi_exec&(&$mh&,&$active&)&;&
}&while&(&$mrc&==&CURLM_CALL_MULTI_PERFORM)&;&
while&(&$active&&&&$mrc&==&CURLM_OK)&{&
&&&&if&(&curl_multi_select&(&$mh&)&!=&-&1&)&{&
&&&&&&&&do&{&
&&&&&&&&&&&&$mrc&=&curl_multi_exec&(&$mh&,&$active&)&;&
&&&&&&&&}&while&(&$mrc&==&CURLM_CALL_MULTI_PERFORM)&;&
// 关闭各个句柄&
curl_multi_remove_handle&(&$mh&,&$ch1&)&;&
curl_multi_remove_handle&(&$mh&,&$ch2&)&;&
curl_multi_close&(&$mh&)&;
这个示例中有两个主要循环。第一个 do-while 循环重复调用 curl_multi_exec()
。这个函数是无隔断(non-blocking)的,但会尽可能少地执行。它返回一个状态值,只要这个值等于常量
CURLM_CALL_MULTI_PERFORM
,就代表还有一些刻不容缓的工作要做(例如,把对应URL的http头信息发送出去)。也就是说,我们需要不断调用该函数,直到返回值发生改变。
而接下来的 while 循环,只在 $active 变量为 true 时继续。这一变量之前作为第二个参数传给了
curl_multi_exec() ,代表只要批处理句柄中是否还有活动连接。接着,我们调用 curl_multi_select()
,在活动连接(例如接受服务器响应)出现之前,它都是被“屏蔽”的。这个函数成功执行后,我们又会进入另一个 do-while
循环,继续下一条URL。
还是来看一看怎么把这一功能用到实处吧:
9.WordPress 连接检查器
10.其它cURL选项
如果某个URL请求需要基于 HTTP 的身份验证,你可以使用下面的代码:
$url&=&"&a
href="&http:&///members/"&/members/&/a&";&
$ch&=&curl_init&(&)&;&
curl_setopt&(&$ch&,&CURLOPT_URL,&$url&)&;&
curl_setopt&(&$ch&,&CURLOPT_RETURNTRANSFER,&1&)&;&
// 发送用户名和密码&
curl_setopt&(&$ch&,&CURLOPT_USERPWD,&"myusername:mypassword"&)&;&
// 你可以允许其重定向&
curl_setopt&(&$ch&,&CURLOPT_FOLLOWLOCATION,&1&)&;&
// 下面的选项让 cURL 在重定向后&
// 也能发送用户名和密码&
curl_setopt&(&$ch&,&CURLOPT_UNRESTRICTED_AUTH,&1&)&;&
$output&=&curl_exec&(&$ch&)&;&
curl_close&(&$ch&)&;
PHP 自带有 FTP 类库, 但你也能用 cURL
// 开一个文件指针&
$file&=&fopen&(&"/path/to/file"&,&"r"&)&;&
// url里包含了大部分所需信息&
$url&=&"ftp://username::21/path/to/new/file"&;&
$ch&=&curl_init&(&)&;&
curl_setopt&(&$ch&,&CURLOPT_URL,&$url&)&;&
curl_setopt&(&$ch&,&CURLOPT_RETURNTRANSFER,&1&)&;&
// 上传相关的选项&
curl_setopt&(&$ch&,&CURLOPT_UPLOAD,&1&)&;&
curl_setopt&(&$ch&,&CURLOPT_INFILE,&$fp&)&;&
curl_setopt&(&$ch&,&CURLOPT_INFILESIZE,&filesize&(&"/path/to/file"&)&)&;&
// 是否开启ASCII模式 (上传文本文件时有用)&
curl_setopt&(&$ch&,&CURLOPT_FTPASCII,&1&)&;&
$output&=&curl_exec&(&$ch&)&;&
curl_close&(&$ch&)&;
你可以用代理发起cURL请求:
$ch&=&curl_init&(&)&;&
curl_setopt&(&$ch&,&CURLOPT_URL,&''&)&;&
curl_setopt&(&$ch&,&CURLOPT_RETURNTRANSFER,&1&)&;&
// 指定代理地址&
curl_setopt&(&$ch&,&CURLOPT_PROXY,&'11.11.11.11:8080'&)&;&
// 如果需要的话,提供用户名和密码&
curl_setopt&(&$ch&,&CURLOPT_PROXYUSERPWD,&'user:pass'&)&;&
$output&=&curl_exec&(&$ch&)&;&
curl_close&(&$ch&)&;
可以在一个URL请求过程中,让cURL调用某指定的回调函数。例如,在内容或者响应下载的过程中立刻开始利用数据,而不用等到完全下载完。&
$ch&=&curl_init&(&)&;&
curl_setopt&(&$ch&,&CURLOPT_URL,&''&)&;&
curl_setopt&(&$ch&,&CURLOPT_WRITEFUNCTION,&"progress_function"&)&;&
curl_exec&(&$ch&)&;&
curl_close&(&$ch&)&;&
function&progress_function(&$ch&,&$str&)&{&
&&&&echo&$str&;&
&&&&return&strlen&(&$str&)&;&
这个回调函数必须返回字串的长度,不然此功能将无法正常使用。
在URL响应接收的过程中,只要收到一个数据包,这个函数就会被调用。
curl爬取过程中,会返回一个http_code,下面是他们的意义信息
$http_code["0"]="Unable to
$http_code["100"]="Continue";
$http_code["101"]="Switching
Protocols";
$http_code["200"]=”OK”;
$http_code["201"]=”Created”;
$http_code["202"]=”Accepted”;
$http_code["203"]=”Non-Authoritative
Information”;
$http_code["204"]=”No Content”;
$http_code["205"]=”Reset
Content”;
$http_code["206"]=”Partial
Content”;
$http_code["300"]=”Multiple
Choices”;
$http_code["301"]=”Moved
Permanently”;
$http_code["302"]=”Found”;
$http_code["303"]=”See Other”;
$http_code["304"]=”Not
Modified”;
$http_code["305"]=”Use Proxy”;
$http_code["306"]=”(Unused)”;
$http_code["307"]=”Temporary
Redirect”;
$http_code["400"]=”Bad
Request”;
$http_code["401"]=”Unauthorized”;
$http_code["402"]=”Payment
Required”;
$http_code["403"]=”Forbidden”;
$http_code["404"]=”Not Found”;
$http_code["405"]=”Method Not
Allowed”;
$http_code["406"]=”Not
Acceptable”;
$http_code["407"]=”Proxy Authentication
Required”;
$http_code["408"]=”Request
Timeout”;
$http_code["409"]=”Conflict”;
$http_code["410"]=”Gone”;
$http_code["411"]=”Length
Required”;
$http_code["412"]=”Precondition
$http_code["413"]=”Request Entity Too
$http_code["414"]=”Request-URI Too
$http_code["415"]=”Unsupported Media
$http_code["416"]=”Requested Range Not
Satisfiable”;
$http_code["417"]=”Expectation
$http_code["500"]=”Internal Server
$http_code["501"]=”Not
Implemented”;
$http_code["502"]=”Bad
Gateway”;
$http_code["503"]=”Service
Unavailable”;
$http_code["504"]=”Gateway
Timeout”;
$http_code["505"]=”HTTP Version Not
Supported”;
小结:今天我们一起学习了cURL库的强大功能和灵活的扩展性。希望你喜欢。下一次要发起URL请求时,考虑下cURL吧!&
使用curl的几个例子
类似于dreamhost这类主机服务商,是显示fopen的使用 的。使用php的curl可以实现支持FTP、FTPS、HTTP
HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL证书、HTTP
POST、HTTP PUT 、FTP
上传,kerberos、基于HTT格式的上传、代理、cookie、用户+口令证明、文件传送恢复、http代理通道就最常用的来说,是基于http的
get和post方法。
代码实现:
1、http的get实现
$ch&=&curl_init("/api/index.php?test=1")&;&&
curl_setopt($ch,&CURLOPT_RETURNTRANSFER,&true)&;&//&获取数据返回&&
curl_setopt($ch,&CURLOPT_BINARYTRANSFER,&true)&;&//&在启用&CURLOPT_RETURNTRANSFER&时候将获取数据返回&&
echo&$output&=&curl_exec($ch)&;&&
$fh&=&fopen("out.html",&'w')&;&&
fwrite($fh,&$output)&;&&
fclose($fh)&;&&&
2、http的post实现
$url&=&'/api/'&;&&
$fields&=&array(&&
&&&&&&&&&&&&&&&'lname'=&'justcoding'&,&&
&&&&&&&&&&&&&&&'fname'=&'phplover'&,&&
&&&&&&&&&&&&&&&'title'=&'myapi',&&
&&&&&&&&&&&&&&&'age'=&'27'&,&&
&&&&&&&&&&&&&&&'email'=&''&,&&
&&&&&&&&&&&&&&&'phone'=&''&&
&&&&&&&&&&&&&&);&&
//$post_data&=&implode('&',$fields);&&
//open&connection&&
$ch&=&curl_init()&;&&
//set&the&url,&number&of&POST&vars,&POST&data&&
curl_setopt($ch,&CURLOPT_URL,$url)&;&&
curl_setopt($ch,&CURLOPT_POST,count($fields))&;&//&启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。&&
curl_setopt($ch,&CURLOPT_POSTFIELDS,$fields);&//&在HTTP中的“POST”操作。如果要传送一个文件,需要一个@开头的文件名&&
ob_start();&&
curl_exec($ch);&&
$result&=&ob_get_contents()&;&&
ob_end_clean();&&
echo&$result;&&
//close&connection&&
curl_close($ch)&;&&
/api/index.php
if($_GET['test'])&&
&&&&&print_r($_GET);&&
if($_POST)&&
&&&&print_r($_POST);&&
3. php的curl传送cookie
一种是自动:
curl_setopt($curlHandle,&CURLOPT_COOKIEJAR,&'cookie.txt&');&//保存&&
curl_setopt($curlHandle,&CURLOPT_COOKIEFILE,&'cookie.txt&');&//读取&&
这样COOKIE会自动跟上去.&
不过要分两次,一是先访问产生cookie,接着连结才能用cookie
Php代码& " quality="high"
type="application/x-shockwave-flash"
pluginspage="/go/getflashplayer"&&
&?php&&&&&
function&get_curlcuconent2($filename,$referer)&&
&&&$cookie_jar&=&tempnam('./tmp','JSESSIONID');&&
&&&$ch&=&curl_init();&&
&&&curl_setopt($ch,&CURLOPT_URL,&$filename);&&
&&&curl_setopt($ch,&CURLOPT_HEADER,&false);&&
&&&curl_setopt($ch,&CURLOPT_RETURNTRANSFER,&1);&&
&&&//设置文件读取并提交的cookie路径&&
&&&curl_setopt($ch,&CURLOPT_COOKIEJAR,&$cookie_jar);&&
&&&$filecontent=curl_exec($ch);&&
&&&curl_close($ch);&&
&&&$ch&=&curl_init();&&
&&&$hostname&="";&&
&&&//$referer="/";&&
&&&curl_setopt($ch,&CURLOPT_URL,&$filename);&&
&&&curl_setopt($ch,&CURLOPT_REFERER,&$referer);&//&看这里,你也可以说你从google来&&
&&&curl_setopt($ch,&CURLOPT_USERAGENT,&"");&&
&&&//$request&=&"JSESSIONID=abc6szw15ozvZ_PU9b-8r";&//设置POST参数&&
&&&//curl_setopt($ch,&CURLOPT_POSTFIELDS,&$request);&&&&&
&&&//&上面这句,当然你可以说你是baidu,改掉这里的值就ok了,可以实现小偷的功能,$_SERVER['HTTP_USER_AGENT']&&
&&&//你也可以自己做个&spider&了,那么就伪装这里的&CURLOPT_USERAGENT&吧&&
&&&//如果你要把这个程序放到linux上用php&-q执行那也要写出具体的$_SERVER['HTTP_USER_AGENT'],伪造的也可以&&
&&&curl_setopt($ch,&CURLOPT_RETURNTRANSFER,&1);&&
&&&curl_setopt($ch,&CURLOPT_COOKIEFILE,&$cookie_jar);&&
&&&curl_setopt($ch,&CURLOPT_HEADER,&false);//设定是否输出页面内容&&
&&&curl_setopt($ch,&CURLOPT_GET,&1);&//&post,get&过去&&
&&&$filecontent&=&curl_exec($ch);&&
&&&preg_match_all("/charset=(.+?)[NULL\"\']/is",$filecontent,&$charsetarray);&&
&&&if(strtolower($charsetarray[1][0])=="utf-8")&&
&&&&&&&&&$filecontent=iconv(&'utf-8',&'gb18030//IGNORE'&,&$filecontent);&&
&&&curl_close($ch);&&
&&&return&$filecontent;&&
一种自定义:
$header[]=&'Accept:&image/gif,&image/x-xbitmap,&image/jpeg,&image/pjpeg,&application/x-shockwave-flash,&text/html,&*&'.&'/*&';&&
$header[]=&'Accept-Language:&zh-cn&';&&
$header[]=&'User-Agent:&Mozilla/4.0&(&MSIE&6.0;&Windows&NT&5.1;&SV1;&.NET&CLR&2.0.50727)&';&&
$header[]=&'Host:&'.$你的目标HOST;&&
$header[]=&'Connection:&Keep-Alive&';&&
$header[]=&'Cookie:&'.$你的COOKIE串;&&
curl_setopt($curlHandel,CURLOPT_HTTPHEADER,$header);&&&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 curlopt httpheader 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信