`
275553385
  • 浏览: 721440 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
文章分类
社区版块
存档分类
最新评论

curl的post方法中enctype编码问题

阅读更多

前几天在学习使用 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

分享到:
评论

相关推荐

    PHP基于curl post实现发送url及相关中文乱码问题解决方法

    如果以上步骤均正确执行,但仍然遇到乱码问题,可以尝试以下方法: - 检查目标服务器的响应头,看是否正确返回了相应的字符集信息。 - 确认目标服务器的网页编码设置,可能需要修改服务器配置或代码来匹配预期的...

    post模拟提交文件中文乱码的问题处理.rar

    总之,处理CMD中curl命令的中文乱码问题需要综合考虑命令行环境、文件编码和curl的使用方式。通过调整CMD编码、正确编码文件名、选择合适的curl选项,或者借助其他工具,通常可以成功解决这个问题。提供的压缩包资源...

    CURL HTTP POST方式表单递交

    1、使用的是curl库,数据采用http post方式表单递交 2、里面有完整的注释,比较规则的代码结构,适合学习交流 3、是控制台程序 4、我也是用到了curl但网上的资料大部分比较松散,我自己实现后分享给大家,相互学习,...

    Curl实现Get下载zip文件、post上传zip文件、普通post请求等

    通过`CURLOPT_POSTFIELDS`选项设置POST数据,对于文件上传,通常需要将文件读取到内存中,然后传递给Curl。Curl会自动处理文件内容的编码和传输。同时,可能还需要设置`Content-Type`为`multipart/form-data`来表明...

    Qt工程中加入curl用于发送Post请求Get请求,数据为json格式

    qt工程中引入编译好的curl库,封装了一个类来执行post请求 可以直接拿来改造。 数据格式为json格式

    php中curl的get,post通用类.zip

    一个PHP curl get post通用类,curl 通用方法 。。get /post 传送数据,设置发送方式 0 get 1 post。具有很好的参考价值,朋友们如果喜欢可以下载,如果有更好的curl类可以发布到我们php中文网,大家一起学习交流。

    Qt工程中用curl发送post请求,发送json返回json

    在Qt工程中,使用curl库发送POST请求并处理JSON数据是一项常见的任务,特别是在与Web服务交互时。这里我们将深入探讨如何实现这一功能。 首先,`curl`是一个强大的命令行工具和库,用于传输数据,支持多种协议,...

    PHP基于curl模拟post提交json数据示例.docx

    在 PHP 中使用 curl 模拟 post 提交 json 数据需要进行以下步骤: 1. 初始化 curl 会话:使用 curl_init() 函数初始化 curl 会话,指定要请求的 URL。 2. 设置请求头:使用 curl_setopt() 函数设置请求头,例如设置...

    c++封装curl,实现get,post,download

    本篇将深入探讨如何在C++中封装libcurl,实现GET、POST请求以及文件下载功能。 首先,我们从`curlpp`这个库开始。`curlpp`是libcurl的一个C++包装器,它提供了更方便、面向对象的API,简化了与libcurl的交互。要...

    linux shell中curl 发送post请求json格式问题的处理方法

    本文将详细讨论如何在Linux shell中使用`curl`发送带JSON格式数据的POST请求,并解决可能遇到的问题。 首先,`curl`是一个强大的命令行工具,用于传输数据到或从服务器,支持多种协议,包括HTTP、HTTPS等。在发送...

    C++ 实现 HTTP HTTPS POST GET(包含curl版本和winhttp两种实现)

    C++ 实现 HTTP HTTPS POST GET(包含curl版本和winhttp两种实现)。 玩过抓包,网络协议分析的朋友肯定都知道http https post get,web端和用户的交互主要是通过post get完成的。 我这里有两种实现: 1:libcurl实现的...

    curl 实现SFTP上传和url Post Json信息

    在本教程中,我们将探讨如何利用 `curl` 实现 SFTP(Secure File Transfer Protocol)上传以及向 URL 发送 POST 和 GET 请求,并处理 JSON 数据。 ### 1. 使用 `curl` 进行 SFTP 上传 SFTP 是基于 SSH 的文件传输...

    HTTPGetPost.rar_c# post_c++ curl_curl_curl post_visual curl

    curl SSL post访问curl SSL post访问

    Go-golang版本的curl请求库

    在上述代码中,`curl.NewRequest()`创建了一个请求对象,通过设置`URL`、`Method`、`Header`和`Body`属性,我们可以构建一个完整的POST请求。`req.Send()`方法负责发送请求并获取响应。 在`go-curl-master`这个...

    用curl做http post

    在C++中使用libcurl进行HTTP POST,我们需要包含头文件`#include &lt;curl/curl.h&gt;`,并确保在编译时链接了libcurl库。下面是一个简单的示例代码,演示如何使用libcurl库实现POST请求: ```cpp #include #include #...

    php采用curl访问域名返回405 method not allowed提示的解决方法

    1. 请求方法不正确:curl默认可能使用POST方法,而服务器只接受GET方法。 2. 请求头配置不当:服务器可能期望特定的HTTP头,而curl默认的头信息设置不符合要求。 3. 服务器端的安全策略:某些服务器为了防止自动化...

    php中curl的get,post通用类

    一个PHP curl get post通用类,curl 通用方法 。。get /post 传送数据,设置发送方式 0 get 1 post。具有很好的参考价值,朋友们如果喜欢可以下载,如果有更好的curl类可以发布到我们php中文网,大家一起学习交流。

    curl发送post请求

    当我们谈论“curl发送POST请求”时,我们关注的是如何使用curl来执行HTTP POST操作,这是一种向Web服务器发送数据的方法,常用于提交表单数据、上传文件或与RESTful API交互。 POST请求通常包含在HTTP请求正文中,...

Global site tag (gtag.js) - Google Analytics