【问题标题】:405 method not allowed json data not post405 方法不允许 json 数据不发布
【发布时间】:2018-03-18 05:16:18
【问题描述】:

我在 php 中制作简单的发布详细信息的形式,但在将数据从表单发布到 API 时卡住了,但它显示 405 method not allowed 错误。请检查下面的代码,让我知道其中有什么问题。可能是我犯了一些愚蠢的错误,如果是这样的话,对不起。

<form method="POST" action="#" name="checkout">

First Name <input type="text" name="firstName"/><br/>
Last name <input type="text" name="lastName"/><br/>
Email <input type="text" name="phone"/><br/>
Phone <input type="text" name="gender"/><br/>

<input type="submit" name="submit" value="submit"/>

</form>

</body>

</html>

<?php

if(isset($_POST['submit']))
{
    $name = $_POST['firstName'];
    $lastname = $_POST['lastName'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];

    $url11 = "https://api.rezdy.com/v1/categories/124095/products?apiKey=bb42962c78b34e02b879cc5463cb4648";
    $data['customer'] = array(
    'firstName'=>$name,
    'lastName'=>$lastname,
    'email'=>$phone,
    'phone'=>$gender
    );
    echo "<pre>";
    $json = json_encode($data);

    echo $json;
    echo "<br/>";
    function senddatat($url,$post)
    {
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"POST");
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
        curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
        curl_setopt($ch, CURLOPT_POST,true); 
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','charset=UTF-8 '));
        $result = curl_exec($ch);
/*echo "<pre>";
var_dump( curl_getinfo($ch) ) . '<br/>';
echo curl_errno($ch) . '<br/>';
echo curl_error($ch) . '<br/>';
        curl_close($ch);*/
    return $result;
    }

    echo " ".senddatat($url11,$json);


}
?>

【问题讨论】:

  • 为什么你给你的文本框提供了错误的标签? Email &lt;input type="text" name="phone"/&gt;&lt;br/&gt; Phone &lt;input type="text" name="gender"/&gt;&lt;br/&gt;
  • 405 http 错误代码可能是指 api 本身。你确定 api 背后的执行方法是工作/可调用的吗?

标签: php http tcp request


【解决方案1】:

首先检查愚蠢的错误:这是你的字段: firstName,lastName,phone,gender

<input type="text" name="firstName"/><br/>
<input type="text" name="lastName"/><br/>
<input type="text" name="phone"/><br/>
<input type="text" name="gender"/><br/>

你在 post 请求中得到了什么: firstName,lastName,email,phone 我不知道你如何在 post 请求中得到 email ????

$name = $_POST['firstName'];
$lastname = $_POST['lastName'];
$email = $_POST['email'];
$phone = $_POST['phone'];

更新:

<form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" name="checkout">

First Name <input type="text" name="firstName"/><br/>
Last name <input type="text" name="lastName"/><br/>
phone <input type="text" name="phone"/><br/>
gender <input type="text" name="gender"/><br/>

<input type="submit" name="submit" value="submit"/>

</form>

</body>

</html>

<?php

if(isset($_POST['submit']) && !empty($_POST['firstName']) && !empty($_POST['lastName']) && !empty($_POST['phone']) && !empty($_POST['gender']) ){

    $name = $_POST['firstName'];
    $lastname = $_POST['lastName'];
    $phone= $_POST['phone'];
    $gender= $_POST['gender'];

    $url11 = "https://api.rezdy.com/v1/categories/124095/products?apiKey=bb42962c78b34e02b879cc5463cb4648";

    $data['customer'] = array('firstName'=>$name,'lastName'=>$lastname,'email'=>$phone,'phone'=>$gender);

    echo "<pre>";
    $json = json_encode($data);
    echo $json;
    echo "<br/>";

    function senddatat($url,$post)
    {
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"POST");
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
        curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
        curl_setopt($ch, CURLOPT_POST,true); 
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','charset=UTF-8 '));
        $result = curl_exec($ch);
/*echo "<pre>";
var_dump( curl_getinfo($ch) ) . '<br/>';
echo curl_errno($ch) . '<br/>';
echo curl_error($ch) . '<br/>';
        curl_close($ch);*/
    return $result;
    }

    echo " ".senddatat($url11,$json);


}
?>

【讨论】:

  • 从哪里获得 $_post['email];表单中缺少标签
  • @Shanukk 这不是他们键入错误的任何电子邮件字段,bcoz array('firstName'=&gt;$name,'lastName'=&gt;$lastname,'email'=&gt;$phone,'phone'=&gt;$gender); 他在里面存储了电话和电子邮件字段
  • 我已经改正了,但还是出现了同样的错误。
  • @subrat 检查现在我更新了答案,如果有任何错误,请告诉我你看到了什么错误
  • @RïshïKêsh 我已经更改了您之前所说的电子邮件和电话,但仍然发生同样的错误
【解决方案2】:

您的表单和发布请求中有一些错误。此外,当您调用 ssl 验证 api 时。您需要通过 ssl 证书。或者暂时你可以通过CURLOPT_SSL_VERIFYPEERFALSE 禁用它

试试这个代码:

<form method="POST" action="#" name="checkout">

First Name <input type="text" name="firstName"/><br/>
Last name <input type="text" name="lastName"/><br/>
Email <input type="text" name="email"/><br/>
Phone <input type="text" name="phone"/><br/>

<input type="submit" name="submit" value="submit"/>

</form>

</body>

</html>

<?php

if(isset($_POST['submit']))
{
    $name = $_POST['firstName'];
    $lastname = $_POST['lastName'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];

    $url11 = "https://api.rezdy.com/v1/categories/124095/products?apiKey=bb42962c78b34e02b879cc5463cb4648";
    $data['customer'] = array(
    'firstName'=>$name,
    'lastName'=>$lastname,
    'email'=>$email,
    'phone'=>$phone
    );
    echo "<pre>";
    $json = json_encode($data);

    echo $json;
    echo "<br/>";
    function senddatat($url,$post)
    {
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"POST");
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
        curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
        curl_setopt($ch, CURLOPT_POST,true); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','charset=UTF-8 '));
        $result = curl_exec($ch);
/* echo "<pre>";
var_dump( curl_getinfo($ch) ) . '<br/>';
echo curl_errno($ch) . '<br/>';
echo curl_error($ch) . '<br/>';*/
        curl_close($ch);
    return $result;
    }

    echo " ".senddatat($url11,$json);


}

编辑

注意:错误清楚地表明Method Not Allowed it 表示POST 方法不允许用于https://api.rezdy.com/v1/categories/124095/products api 你需要参考api doc

【讨论】:

  • 先生同样的错误正在发生。请检查以下错误 {"requestStatus":{"success":false,"error":{"errorCode":"1","errorMessage":"HTTP 405 方法不允许"}}}
  • 检查您的网址以获取产品详细信息,它不会发布数据
  • 好的,先生,让我检查一下
  • 'email'=&gt;$phone,'phone'=&gt;$phone ????我认为你必须更新 ans !!
  • @subrat 它清楚地告诉Method Not Allowed 这意味着POST 方法是不允许https://api.rezdy.com/v1/categories/124095/products api 你需要参考api doc
猜你喜欢
  • 1970-01-01
  • 2015-08-25
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多