【问题标题】:cURL changing the URL after POSTcURL 在 POST 后更改 URL
【发布时间】:2010-10-04 21:19:28
【问题描述】:

我正在使用 cURL 进行 HTTP POST

$url = "http://localhost:8080/~demo/cgi-bin/execute/100";

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($data));
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);

//execute post
$result = curl_exec($ch);
echo("$result");
//close connection
curl_close($ch);

帖子被执行,但响应显示错误:

请求的 URL /~demo/100 是 在此服务器上找不到


显然,上述 URL 不存在于服务器之外,因为(不知何故)cURL 改变了 URL。

应该是 /~demo/cgi-bin/execute/100 。此网址可在浏览器中使用。

请告诉我为什么这样做? 为了我想要的,我该如何阻止它?

【问题讨论】:

  • 大概如果你尝试在浏览器窗口中访问localhost:8080/~demo/cgi-bin/execute/100 就可以了?
  • 抛出一个 print_r( curl_getinfo($ch) );在 curl_exec() 之后看看你得到了什么。
  • 应该是 curl_setopt($ch,CURLOPT_POST,true);

标签: php post curl httpwebrequest


【解决方案1】:
  • 安装 Fiddler。
  • 启用调试。
  • 在浏览器中访问网站。
  • 执行 php cURL 代码。

Fiddler 会准确地告诉您 Web 服务器正在接收和发送的内容。由于您在本地运行,因此您也可以准确地看到 php 发送的内容。比较两者,就会发现问题所在。

【讨论】:

    【解决方案2】:

    也许 cURL 试图访问默认的 http 端口 80?尝试使用

    curl_setopt($ch, CURLOPT_PORT, 8080)
    

    【讨论】:

      【解决方案3】:

      可能不是 cURL 正在更改 URL,而是 Web 服务器正在向 cURL 发送重定向标头,指向不同的位置。也许以下内容会有所帮助:

      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
      

      【讨论】:

      【解决方案4】:

      在哪里?

      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-27
        • 2012-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多