【问题标题】:How to use curl GET instead of POST如何使用 curl GET 而不是 POST
【发布时间】:2020-10-18 12:13:20
【问题描述】:

我很想使用 curl 打印来自 url 的返回。到目前为止,我的代码如下所示:

<?php
    $street = $_GET['street'];
    $city = $_GET['city'];
    $state = $_GET['state'];
    $zip = $_GET['zip'];

    $url = 'http://eligibility.cert.sc.egov.usda.gov/eligibility/eligibilityservice';
    $query = 'eligibilityType=Property&requestString=<?xml version="1.0"?><Eligibility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="/var/lib/tomcat5/webapps/eligibility/Eligibilitywsdl.xsd"><PropertyRequest StreetAddress1="'.$street.'" StreetAddress2="" StreetAddress3="" City="'.$city.'" State="'.$state.'" County="" Zip="'.$zip.'" Program="RBS"></PropertyRequest></Eligibility>';
    $url_final = $url.''.$url_query;

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$query);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $return = curl_exec ($ch);
    curl_close ($ch);

    echo $return;

?>

我知道的唯一明显问题是被查询的服务器使用GET 而不是POST。这种方法有GET 的替代方法吗?

【问题讨论】:

  • 这是一个很长的查询字符串,要通过 GET 发送。您可能会遇到浏览器长度限制并发现它已被斩首或截断。
  • 如果我在浏览器中运行它,它工作正常。 cURL 的规则会有什么不同吗?
  • 你为什么要投反对票?我在问POSTFIELDS 是否有替代 GET 方法。

标签: php curl


【解决方案1】:
curl_setopt($ch, CURLOPT_POST, 0);

Curl 默认使用 GET。您将其设置为 POST。如果需要,可以使用 curl_setopt($ch, CURLOPT_HTTPGET, 1);

覆盖它

【讨论】:

  • 但是 POSTFIELDS 呢?我是否只是省略它并将查询字段与 URL 一起传递?
  • 是的,您可以将此变量修复为 $url_final = $url.'?'.$url_query;,然后在您的 curl_setopt($ch, CURLOPT_URL, $url_final); 中使用它
【解决方案2】:

使用file_get_contents()函数
file_get_contents

或者
curl_setopt($ch, CURLOPT_HTTPGET, 1);

【讨论】:

    【解决方案3】:

    使用

    curl_setopt_array($ch, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => "http://yourlink.com",
    CURLOPT_USERAGENT => 'Codular Sample cURL Request'));
    

    【讨论】:

      【解决方案4】:

      这些年来,没有人给出正确的答案;构建查询字符串的方法是将http_build_query() 与数组一起使用。这会自动转义所有内容并返回一个简单的字符串。

      $xml = '<?xml version="1.0"?><Eligibility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="/var/lib/tomcat5/webapps/eligibility/Eligibilitywsdl.xsd"><PropertyRequest StreetAddress1="'.$street.'" StreetAddress2="" StreetAddress3="" City="'.$city.'" State="'.$state.'" County="" Zip="'.$zip.'" Program="RBS"></PropertyRequest></Eligibility>';
      $data = [
          "eligibilityType" => "Property",
          "requestString" => $xml
      ];
      $query = http_build_query($data);
      $url .= "?$query";
      

      【讨论】:

      • 不确定这是问题的重点,但感谢您的意见。
      【解决方案5】:

      您在 URL 中缺少问号。 应该是这样的:

      $query = '?eligibilityType=Property&...';
      

      此外,您的 URL 中的 XML 需要编码,例如在 PHP 中使用urlencode() 函数。

      【讨论】:

      • cURL 的示例没有问号。你确定需要这个吗?
      猜你喜欢
      • 1970-01-01
      • 2011-08-04
      • 2010-09-07
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多