【问题标题】:What Steps do you Take to Troubleshoot Problems with PHP cURL?您采取哪些步骤来解决 PHP cURL 的问题?
【发布时间】:2010-10-23 09:19:09
【问题描述】:

几乎所有工作的 PHP 程序员都不得不使用 CURL 来发送原始 HTTP 请求,无论是用于信用卡支付处理、恶意屏幕抓取还是介于两者之间的东西。

几乎所有 PHP 程序员聚集的论坛都有大量can't get the cURL functions to do what they want 的人。

当 cURL 对您不起作用时,您会使用哪些故障排除技术来找出它不起作用的原因?你在 PHP 的 curl 实现中遇到了哪些奇怪的问题?如果有人在论坛上提出“HALP MY CURL IZ BROKEN”问题,您会采取哪些步骤来找出他们的请求不起作用的原因?

【问题讨论】:

  • 只需使用 CURLOPT_HEADER 获取标题.. 不需要该功能

标签: php debugging http curl


【解决方案1】:

我发现 CURLINFO_HEADER_OUT 选项非常有用。

请求头
  
', htmlspecialchars(curl_getinfo($curl, CURLINFO_HEADER_OUT)), '
'; echo '
响应
', htmlspecialchars(dbg_curl_data(null)), '
'; 函数 dbg_curl_data($curl, $data=null) { 静态 $buffer = ''; if ( is_null($curl) ) { $r = $缓冲区; $缓冲区 = ''; 返回 $r; } 别的 { $缓冲区.= $数据; 返回 strlen($data); } }

【讨论】:

  • 这也适用于发布数据吗?我收到错误Warning: curl_exec() [function.curl-exec]: Could not call the CURLOPT_WRITEFUNCTION in C:\xampp\htdocs\my_project\login.php ine 49 上写着$res=curl_exec($curl);
  • 是的,它也适用于 POST 数据。看起来您传递给 curl_setopt/CURLOPT_WRITEFUNCTION 的函数名称实际上并未解析为函数/可调用对象。
  • 哇,这是一个非常干净高效的解决方案。真的帮了我很多,谢谢!
【解决方案2】:

实际上,我从不使用 CURL(在 php 中)。 PHP 流 api 更简洁,也可以用于 POST 数据。 Wez Furlong 有一篇关于此的文章。

如果我要使用它?我将从打开所有消息开始(将错误报告设置为 E_ALL)。如果我发现 PHP 没有在错误消息中告诉我我需要什么,我可能会使用代理方法来查看实际发生的情况。将目标 url 更改为包含类似内容的本地 php 页面

<?php
var_dump($_POST);
var_dump($_GET);
var_dump($_SERVER);

是一种方式。另一种方法是使用 netcat 之类的实用程序侦听端口 80 并将请求发送到那里:

netcat -l -p 80

这不会向 curl 返回任何内容,但它可以让您准确查看发送到服务器的内容,这可能足以诊断问题。

您还可以使用 apache_request_headers() 函数从 PHP 中检索标头。不过,在大多数情况下,我更喜欢 netcat 方法,因为它保证我看到未经修改的事实,并且还显示原始帖子数据。

【讨论】:

  • 这是关于流库的一个很好的观点。如果 fopen url 包装器关闭,流函数是否可用?
  • 流函数可能可用,但我链接到的示例仍然需要使用 fopen() 完成实际连接,这意味着它在 allow_url_fopen 关闭的情况下不起作用。如果是这种情况,你注定要使用 curl。就个人而言,我总是打开它,并避免从一开始就将 url fopen 变成一个安全问题的错误。 :)
  • 我非常喜欢stream api。附带说明:php(或 curl 扩展)可以编译为使用 curl 作为某些 url 包装器的处理程序。
  • 是的,整个 fopen url 包装问题可能会阻止流函数将 curl 作为使用 PHP 发出 http 请求的默认方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 2020-04-18
相关资源
最近更新 更多