当前位置: 首页 > 知识库问答 >
问题:

CURL未将数据发布到URL

苏彭薄
2023-03-14

我有一个简单的形式,我想转换成一个PHP后端系统。

现在,此表单有一个提交到URL的操作—URL仅在提交了名为postdata的数据以及正确的信息(已编码的xml)时才接受邀请。

作品:-请注意,输入名称被称为postdata和值包含的xml已经urlencoded和它完美的工作。

<form name="nonjava" method="post" action="https://url.com">
    <input name="postdata" id="nonjavapostdata" type="hidden" value="&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;" />
    <button type="submit" name="submit">Button</button>
</form>

但是,我希望通过在PHP中移动postdata元素来实现以下目标,因为大量信息都是通过这种方式传递的。

请注意:链接是https,但它在本地不起作用,所以我不得不在CURL中禁用它。

<?php
    $url = 'https://super.com';
    $xmlData = '<?xml version="1.0" encoding="utf-8"?>
    <postdata
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema">
         <api>2</api>
    </postdata>';

    $testing = urlencode($xmlData);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "postdata=" . $testing);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_VERBOSE, true);

    $response = curl_exec($ch);

    // Then, after your curl_exec call:
    $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    $header = substr($response, 0, $header_size);
    $body = substr($response, $header_size);

    echo $header_size . '<br>';
    echo htmlspecialchars($header) . '<br>';
    echo htmlspecialchars($body) . '<br><br>';

    $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    echo "$http_status for $url <br>";
?>

我一直收到一个302错误(这是因为url内容找不到数据,所以将其重定向到找不到的页面。)

共有3个答案

许嘉珍
2023-03-14

您需要按照卷曲302重定向。curl_setopt($curl,CURLOPT_FOLLOWLOCATION, true);这相当于在CLI执行curl-L。你可以在php留档中看到一个例子。

阮星火
2023-03-14

您的代码按预期工作,我正在获取POST数据:

数组([postdata]=

因此问题出在接收端,它没有正确处理。

隗和裕
2023-03-14

302不是错误;这只意味着你需要转到重定向的URL。浏览器会自动为您执行此操作。在PHP代码中,您必须自己完成。查看302上的位置标题。

我试着看看是否有一种方法可以让Curl遵循重定向;许多语言HTTP库都支持这一点。这个线程似乎表明CuRL也支持它——有没有一种方法可以通过命令行CuRL跟踪重定向

 类似资料:
  • 问题内容: 如何使用HttpURLConnection发布JSON数据?我正在尝试: 我在第14行中收到编译错误。 cURL请求为: 这是处理cURL请求的方法吗?任何信息对我都会非常有帮助。 谢谢。 问题答案: OutputStream希望使用字节,并且您要向其传递字符。试试这个:

  • 问题内容: 是否可以将数据发布到JsonP?还是所有数据都必须作为GET请求传递到查询字符串中? 我有很多数据需要跨域发送到服务,并且太大,无法通过查询字符串发送 解决这个问题有哪些选择? 问题答案: 由于同一个原始策略的(相当明智的)限制,因此无法与另一个域上的服务进行异步。JSON- P之所以起作用,是因为允许您将标签插入DOM,并且它们可以指向任何地方。 当然,您可以使用常规形式的POST来

  • 我正在尝试使用axios发送数据,但它发送的响应超出预期。当我使用postman发出相同请求时,它会成功地向我的手机发送通知,以下是postman的响应: 但是使用axios,通知不会发送到我的手机,以下是axios的响应: 这是我的axios代码:

  • 问题内容: 我使用Ubuntu并在其上安装了cURL。我想用cURL测试我的Spring REST应用程序。我在Java端编写了POST代码。但是,我想用cURL对其进行测试。我正在尝试发布JSON数据。示例数据如下: 我使用以下命令: 它返回此错误: 错误描述是这样的: 服务器拒绝了此请求,因为请求实体的格式不受请求方法()的请求资源支持。 Tomcat日志:“ POST / ui / weba

  • 问题内容: 如何将POST数据发送到PHP中的URL(无表单)? 我将使用它来发送变量以完成并提交表单。 问题答案: 如果您希望将数据从PHP代码本身发布到URL(不使用html表单),则可以使用curl来完成。它看起来像这样: 这会将post变量发送到指定的url,页面返回的内容将在$ response中。

  • 问题内容: 我可能还差得远,但是我整个下午一直在尝试在本教程PHP框架教程中运行curlpost命令。我不明白的是PHP应该如何解释我的POST,它总是以空数组的形式出现。 (其中的斜线只是让我看起来不像是个白痴,而是我使用PHP 5.2在Windows上执行此操作,也曾在与Linux curl相同版本的Linux服务器上尝试过) 我必须缺少一些东西,因为它看起来很简单,帖子解释得不好,如果可以的