Php 卷曲问题
我遇到了一个奇怪的问题 我有几行简单的代码来调用api服务。当运行完Drupal时(在浏览器和cli中的php文件中),此代码运行得非常好,但当文件包含在Drupal中时(在引导之后),它会进行不同的操作 在正常情况下,API服务返回的结果有许多结果,但在Drupal中运行时,它只返回一个结果 我怀疑Drupal正在更改CURL使用的设置,这改变了API理解调用的方式 有人知道问题可能是由什么引起的吗 下面的代码来自我们在公共库中编写的api类文件。我们计划将来在其他PHP项目中使用这些 代码如下:Php 卷曲问题,php,drupal,curl,Php,Drupal,Curl,我遇到了一个奇怪的问题 我有几行简单的代码来调用api服务。当运行完Drupal时(在浏览器和cli中的php文件中),此代码运行得非常好,但当文件包含在Drupal中时(在引导之后),它会进行不同的操作 在正常情况下,API服务返回的结果有许多结果,但在Drupal中运行时,它只返回一个结果 我怀疑Drupal正在更改CURL使用的设置,这改变了API理解调用的方式 有人知道问题可能是由什么引起的吗 下面的代码来自我们在公共库中编写的api类文件。我们计划将来在其他PHP项目中使用这些 代码如
$params = array(
'domain' => array(
'www.domain1.com',
'www.domain2.info',
'www.domain3.in.th',
'www.domain4.com',
'www.domain5.in',
)
);
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => 'http://api.postrank.com/v2/domain/activity?appkey=123456&format=json',
CURLOPT_HEADER => false,
CURLOPT_CONNECTTIMEOUT => 30,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($params)
));
$response = curl_exec($ch);
$err = curl_errno($ch);
curl_close($ch);
print_r($response);
更新1:
CURLOPT_VERBOSE和curl_getinfo的输出
CLI版本:
* About to connect() to api.postrank.com port 80 (#0)
* Trying 75.101.138.238... * connected
* Connected to api.postrank.com (75.101.138.238) port 80 (#0)
> POST /v2/domain/activity?appkey=123456&format=json HTTP/1.1
Host: api.postrank.com
Accept: */*
Content-Length: 159
Content-Type: application/x-www-form-urlencoded
http://api.postrank.com/v2/domain/activity?appkey=123456&format=json
[content_type] => text/javascript
[http_code] => 200
[header_size] => 172
[request_size] => 355
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.968
[namelookup_time] => 0
[connect_time] => 0.437
[pretransfer_time] => 0.437
[size_upload] => 159
[size_download] => 998
[speed_download] => 1030
[speed_upload] => 164
[download_content_length] => 998
[upload_content_length] => 0
[starttransfer_time] => 0.968
[redirect_time] => 0
)
*即将连接()到api.postrank.com端口80(#0)
*正在尝试75.101.138.238…*有联系的
*连接到api.postrank.com(75.101.138.238)端口80(#0)
>POST/v2/domain/activity?appkey=123456&format=json HTTP/1.1
主持人:api.postrank.com
接受:*/*
内容长度:159
内容类型:application/x-www-form-urlencoded
http://api.postrank.com/v2/domain/activity?appkey=123456&format=json
[内容类型]=>text/javascript
[http_代码]=>200
[标题大小]=>172
[请求大小]=>355
[filetime]=>-1
[ssl\u验证\u结果]=>0
[重定向\u计数]=>0
[总时间]=>0.968
[namelookup\u time]=>0
[连接时间]=>0.437
[预转移时间]=>0.437
[上传大小]=>159
[下载大小]=>998
[速度下载]=>1030
[速度上传]=>164
[下载内容长度]=>998
[上传内容长度]=>0
[开始传输时间]=>0.968
[重定向时间]=>0
)
Drupal版本:
* About to connect() to api.postrank.com port 80 (#0)
* Trying 75.101.138.238... * connected
* Connected to api.postrank.com (75.101.138.238) port 80 (#0)
> POST /v2/domain/activity?appkey=123456&format=json HTTP/1.1
Host: api.postrank.com
Accept: */*
Content-Length: 175
Content-Type: application/x-www-form-urlencoded
http://api.postrank.com/v2/domain/activity?appkey=123456&format=json
[content_type] => text/javascript
[http_code] => 200
[header_size] => 172
[request_size] => 371
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.905
[namelookup_time] => 0
[connect_time] => 0.437
[pretransfer_time] => 0.437
[size_upload] => 175
[size_download] => 126
[speed_download] => 139
[speed_upload] => 193
[download_content_length] => 126
[upload_content_length] => 0
[starttransfer_time] => 0.905
[redirect_time] => 0
)
*即将连接()到api.postrank.com端口80(#0)
*正在尝试75.101.138.238…*有联系的
*连接到api.postrank.com(75.101.138.238)端口80(#0)
>POST/v2/domain/activity?appkey=123456&format=json HTTP/1.1
主持人:api.postrank.com
接受:*/*
内容长度:175
内容类型:application/x-www-form-urlencoded
http://api.postrank.com/v2/domain/activity?appkey=123456&format=json
[内容类型]=>text/javascript
[http_代码]=>200
[标题大小]=>172
[请求大小]=>371
[filetime]=>-1
[ssl\u验证\u结果]=>0
[重定向\u计数]=>0
[总时间]=>0.905
[namelookup\u time]=>0
[连接时间]=>0.437
[预转移时间]=>0.437
[上传大小]=>175
[下载大小]=>126
[速度下载]=>139
[速度上传]=>193
[下载内容长度]=>126
[上传内容长度]=>0
[开始传输时间]=>0.905
[重定向时间]=>0
)
答案是Drupal将查询字符串中的“&”改为“
”,远程API服务只处理参数分隔符“&”,而不处理“
”。因此,当它将post数据拆分时,它只正确地获得了数组中的第一个参数。@RRStoyanov,是的,我的意思是&代码>。