我需要通过API获取PIN码,但无法获取端点响应的正文。该过程非常简单,不需要身份验证。只需在MAILTO字段中发送电子邮件,Web服务就会返回PIN,或者说找不到电子邮件。在下面的例子中,我只想接收Json。但我无法做到这一点。
然而,当我在Postman中测试端点时,它工作得很好,但是当我在PHP中测试时,甚至不能得到Postman本身生成的CURL。
下面是我使用的PHP代码。
<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://api-dev.meucliente.app.br/api/Login/sistema/forgot-pin?mailto=teste@verificando.com.br');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
$esposta = curl_exec($curl);
curl_close($curl);
header('Content-Type: application/json');
var_dump($esposta);
?>
上述脚本返回以下结果:
string(123) "HTTP/1.1 404 Not Found
Date: Thu, 24 Nov 2022 14:28:51 GMT
Content-Length: 0
Connection: keep-alive
Server: Kestrel
当我在Postman中测试同一个端点时,返回结果是正确的:
[
{
"Mensagem": "Email não foi encontrado!!",
"InnerException": null
}
]
无论谁帮助我,我都会非常感激。
3条答案
按热度按时间p1tboqfb1#
如果你得到了正确的网址,你的代码应该工作得很好。
也就是说,请求是否应该是GET,这是很可能的。
你所说的你的回应,并不是回应。
它是响应标头,您之所以得到它,是因为您有以下选项:
请求失败。
看一下响应头的第一行。
它返回的HTTP状态为
404 Not Found
这不是有效的URL:
https://api-dev.meucliente.app.br/
它在 Postman 中也不起作用。
xvw2m8pv2#
您没有包含Postman设置,问题就在那里。实际上问题出在您的cURL请求中,它没有模仿Postman请求。默认情况下,cURL执行
GET
请求,但您所访问的API显然期望POST
类型的请求,并简单地丢弃对该端点的所有不满足该期望的请求。如果您将Postman方法类型更改为GET
并尝试执行请求,那么您也不会得到JSON返回,就像您在PHP代码中遇到的一样。因此,如果这是您遇到的唯一问题,您还需要执行
POST
请求,只需添加:您的程式码,而且应该是好的:
它将返回预期的数据:
顺便说一句:行
不正确。您没有输出纯JSON,而只是输出字符串(根据
var_dump()
),因此您应该删除它,或者删除curl_setopt($curl, CURLOPT_HEADER, true);
并将var_dump()
替换为纯echo
。或者,如果您在浏览器中测试,则只需将header()
替换为echo '<pre>';
。ldfqzlk83#
在PHP 8.0.22版本中,要在POST模型中的CURL请求中获取BODY,我还需要发送BODY,即使它是空的。
以下是有效的脚本: