您采取了哪些步骤来解决PHP cURL的问题?
几乎所有正在工作的PHP程序员都必须使用CURL来发送原始HTTP请求,无论是用于信用卡支付处理、恶意的屏幕抓取还是介于两者之间的其他用途 几乎所有PHP程序员聚集的论坛都有大量的人参与其中您采取了哪些步骤来解决PHP cURL的问题?,php,debugging,http,curl,Php,Debugging,Http,Curl,几乎所有正在工作的PHP程序员都必须使用CURL来发送原始HTTP请求,无论是用于信用卡支付处理、恶意的屏幕抓取还是介于两者之间的其他用途 几乎所有PHP程序员聚集的论坛都有大量的人参与其中 当cURL对您不起作用时,您会使用哪些故障排除技术来找出它不起作用的原因?你在PHP的curl实现中遇到了什么奇怪的问题?如果有人在论坛上问一个“HALP MY CURL IZ break”的问题,你会采取什么步骤来找出他们的请求不起作用的原因?事实上,我从不使用CURL(在php中)。PHP流api更整洁
当cURL对您不起作用时,您会使用哪些故障排除技术来找出它不起作用的原因?你在PHP的curl实现中遇到了什么奇怪的问题?如果有人在论坛上问一个“HALP MY CURL IZ break”的问题,你会采取什么步骤来找出他们的请求不起作用的原因?事实上,我从不使用CURL(在php中)。PHP流api更整洁,也可以用于发布数据。有一篇关于这方面的文章 如果我要用它?我首先打开所有消息(将错误报告设置为E_all)。如果我发现PHP没有在错误消息中告诉我需要什么,我可能会使用代理方法来查看实际情况。将目标url更改为包含以下内容的本地php页面
<?php
var_dump($_POST);
var_dump($_GET);
var_dump($_SERVER);
这不会将任何内容返回给curl,但它将允许您准确地查看发送到服务器的内容,这可能足以诊断问题
您还可以使用函数从PHP检索标题。不过,在大多数情况下,我更喜欢netcat方法,因为它可以确保我看到未修改的事实,并显示原始帖子数据。我发现CURLINFO\u HEADER\u OUT选项非常有用 <?php $curl = curl_init('http://www.php.net'); curl_setopt($curl, CURLOPT_HEADERFUNCTION, 'dbg_curl_data'); curl_setopt($curl, CURLOPT_WRITEFUNCTION, 'dbg_curl_data'); curl_setopt($curl, CURLINFO_HEADER_OUT, true); curl_exec($curl); echo '<fieldset><legend>request headers</legend> <pre>', htmlspecialchars(curl_getinfo($curl, CURLINFO_HEADER_OUT)), '</pre> </fieldset>'; echo '<fieldset><legend>response</legend> <pre>', htmlspecialchars(dbg_curl_data(null)), '</pre> </fieldset>'; function dbg_curl_data($curl, $data=null) { static $buffer = ''; if ( is_null($curl) ) { $r = $buffer; $buffer = ''; return $r; } else { $buffer .= $data; return strlen($data); } }
关于流库,这是一个很好的观点。如果关闭了fopen url包装器,流函数是否可用?流函数可能可用,但我链接到的示例仍然要求使用fopen()完成实际连接,这意味着在关闭allow_url_fopen的情况下它将无法工作。如果是这样,你就注定要使用curl。就我个人而言,我总是打开它,避免犯从一开始就把url fopen变成安全问题的错误。:)我非常喜欢流api。作为旁注:php(或curl扩展)可以编译为使用curl作为一些url包装的处理程序。是的,整个fopen url包装问题可能会阻止流函数将curl作为使用php进行http请求的默认方式。这也适用于post数据吗??我收到错误
警告:curl\u exec()[function.curl exec]:无法在C:\xampp\htdocs\my\u project\login.php中调用CURLOPT\u WRITEFUNCTION,其中第49行中有write$res=curl\u exec($curl)代码>是,它也适用于POST数据。看起来您传递给curl_setopt/CURLOPT_WRITEFUNCTION的函数名实际上并没有解析为函数/callable.Wow,这是一个非常干净高效的解决方案。真的帮了我很多忙,谢谢!只需使用CURLOPT_头即可获取头。。不需要这个功能
<?php
$curl = curl_init('http://www.php.net');
curl_setopt($curl, CURLOPT_HEADERFUNCTION, 'dbg_curl_data');
curl_setopt($curl, CURLOPT_WRITEFUNCTION, 'dbg_curl_data');
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
curl_exec($curl);
echo '<fieldset><legend>request headers</legend>
<pre>', htmlspecialchars(curl_getinfo($curl, CURLINFO_HEADER_OUT)), '</pre>
</fieldset>';
echo '<fieldset><legend>response</legend>
<pre>', htmlspecialchars(dbg_curl_data(null)), '</pre>
</fieldset>';
function dbg_curl_data($curl, $data=null) {
static $buffer = '';
if ( is_null($curl) ) {
$r = $buffer;
$buffer = '';
return $r;
}
else {
$buffer .= $data;
return strlen($data);
}
}