前几天在学习使用 CURL 时遇到一个问题:在 a.php 中以 POST 方式向 b.php 提交数据,但是 b.php 下就是无法接收到数据,而 CURL 操作又显示成功,非常诡异。后经多方查找,从中得到了启发。原来,“传递一个数组到CURLOPT_POSTFIELDS,cURL会把数据编码成 multipart/form-data,而然传递一个URL-encoded字符串时,数据会被编码成 application/x-www-form-urlencoded。
”,而和我一样对 CURL 不太熟悉的人在编写程序时,代码往往是下面的样子:
$data = array( 'Title' => $title, 'Content' => $content, 'ComeFrom' => $comefrom );
curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, false);
curl_setopt($ch, CURLOPT_URL, 'http://example.com/b.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);
也就是将所要提交的数据以数组的形式通过 POST 发送,而这样就会导致 CURL 使用“错误”的编码“multipart/form-data”,其效果相当于我们直接以“<form method="post" action="b.php" enctype="multipart/form-data">”这样的表单来完成操作,大家可以试试,这时的“b.php”是无论如何也无法通过 $_POST 来接收数据的。
所以,正确的做法应该是将上述范例代码中的 $data 由数组变为经 urlencode() 编码后的字符串连接,类似:
$data = 'Title=' .urlencode($title) . '&Content=' .urlencode($content) . '&ComeFrom=' .urlencode($comefrom);
这样就可以了。
注意:两种发送编码格式的区别,"multipart/form-data" 是把表单设置为MIME编码,目的是用来传输二进制文件的,若想上传文件,必须用这个编码。但是普通的url数据request使用的是“application/x-www-form-urlencoded” 格式, 所以如果传普通数据用2进制格式,对方就无法得不到值了。所以特别注意应该将发送请求的编码确定。
顺便再记录一下echo和print_r()的区别,一般总是用echo来输出一个变量,比如
echo $data;
echo " i am a fool!!!";
echo主要用来输出字符串,或者变量,不能用于直接输出数组
print_r()是一个函数,专门用来直接输出数组的,比如
print_r($array); 他会按照一定的格式,把数组的标号和内容打印出来。
源地址:http://blog.renren.com/GetEntry.do?id=737967033&owner=250235191
相关推荐
如果以上步骤均正确执行,但仍然遇到乱码问题,可以尝试以下方法: - 检查目标服务器的响应头,看是否正确返回了相应的字符集信息。 - 确认目标服务器的网页编码设置,可能需要修改服务器配置或代码来匹配预期的...
总之,处理CMD中curl命令的中文乱码问题需要综合考虑命令行环境、文件编码和curl的使用方式。通过调整CMD编码、正确编码文件名、选择合适的curl选项,或者借助其他工具,通常可以成功解决这个问题。提供的压缩包资源...
1、使用的是curl库,数据采用http post方式表单递交 2、里面有完整的注释,比较规则的代码结构,适合学习交流 3、是控制台程序 4、我也是用到了curl但网上的资料大部分比较松散,我自己实现后分享给大家,相互学习,...
通过`CURLOPT_POSTFIELDS`选项设置POST数据,对于文件上传,通常需要将文件读取到内存中,然后传递给Curl。Curl会自动处理文件内容的编码和传输。同时,可能还需要设置`Content-Type`为`multipart/form-data`来表明...
qt工程中引入编译好的curl库,封装了一个类来执行post请求 可以直接拿来改造。 数据格式为json格式
一个PHP curl get post通用类,curl 通用方法 。。get /post 传送数据,设置发送方式 0 get 1 post。具有很好的参考价值,朋友们如果喜欢可以下载,如果有更好的curl类可以发布到我们php中文网,大家一起学习交流。
在Qt工程中,使用curl库发送POST请求并处理JSON数据是一项常见的任务,特别是在与Web服务交互时。这里我们将深入探讨如何实现这一功能。 首先,`curl`是一个强大的命令行工具和库,用于传输数据,支持多种协议,...
在 PHP 中使用 curl 模拟 post 提交 json 数据需要进行以下步骤: 1. 初始化 curl 会话:使用 curl_init() 函数初始化 curl 会话,指定要请求的 URL。 2. 设置请求头:使用 curl_setopt() 函数设置请求头,例如设置...
本篇将深入探讨如何在C++中封装libcurl,实现GET、POST请求以及文件下载功能。 首先,我们从`curlpp`这个库开始。`curlpp`是libcurl的一个C++包装器,它提供了更方便、面向对象的API,简化了与libcurl的交互。要...
本文将详细讨论如何在Linux shell中使用`curl`发送带JSON格式数据的POST请求,并解决可能遇到的问题。 首先,`curl`是一个强大的命令行工具,用于传输数据到或从服务器,支持多种协议,包括HTTP、HTTPS等。在发送...
C++ 实现 HTTP HTTPS POST GET(包含curl版本和winhttp两种实现)。 玩过抓包,网络协议分析的朋友肯定都知道http https post get,web端和用户的交互主要是通过post get完成的。 我这里有两种实现: 1:libcurl实现的...
在本教程中,我们将探讨如何利用 `curl` 实现 SFTP(Secure File Transfer Protocol)上传以及向 URL 发送 POST 和 GET 请求,并处理 JSON 数据。 ### 1. 使用 `curl` 进行 SFTP 上传 SFTP 是基于 SSH 的文件传输...
curl SSL post访问curl SSL post访问
在上述代码中,`curl.NewRequest()`创建了一个请求对象,通过设置`URL`、`Method`、`Header`和`Body`属性,我们可以构建一个完整的POST请求。`req.Send()`方法负责发送请求并获取响应。 在`go-curl-master`这个...
在C++中使用libcurl进行HTTP POST,我们需要包含头文件`#include <curl/curl.h>`,并确保在编译时链接了libcurl库。下面是一个简单的示例代码,演示如何使用libcurl库实现POST请求: ```cpp #include #include #...
1. 请求方法不正确:curl默认可能使用POST方法,而服务器只接受GET方法。 2. 请求头配置不当:服务器可能期望特定的HTTP头,而curl默认的头信息设置不符合要求。 3. 服务器端的安全策略:某些服务器为了防止自动化...
一个PHP curl get post通用类,curl 通用方法 。。get /post 传送数据,设置发送方式 0 get 1 post。具有很好的参考价值,朋友们如果喜欢可以下载,如果有更好的curl类可以发布到我们php中文网,大家一起学习交流。
当我们谈论“curl发送POST请求”时,我们关注的是如何使用curl来执行HTTP POST操作,这是一种向Web服务器发送数据的方法,常用于提交表单数据、上传文件或与RESTful API交互。 POST请求通常包含在HTTP请求正文中,...