如何确定使用 PHP cURL 发布 JSON 是不是成功?
Posted
技术标签:
【中文标题】如何确定使用 PHP cURL 发布 JSON 是不是成功?【英文标题】:How to determine if posting JSON with PHP cURL is succeed?如何确定使用 PHP cURL 发布 JSON 是否成功? 【发布时间】:2015-03-30 09:12:43 【问题描述】:目标
我想知道我是否成功地将我的 JSON 发布到这个 url http://localhost/api_v2/url/post?key=***
,所以我最终可以取回它们,但我不确定如何测试它们。
我试过了
通常,我们可以通过print_r($result )
来查看变量中的内容,但是当我这样做时,什么都没有显示。
当我执行echo $result
时,也没有任何显示。
到目前为止,没有任何帮助,所以我决定在执行 echo $ch;
时将下一个变量 $ch
向上移动,我得到了这个 Resource id #188
。现在,我被困住了。
有人可以帮我澄清一下吗?
这是我的代码
public function post()
$ch = curl_init("http://localhost/api_v2/url?key=***");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$file_name = 'inventory.csv';
$file_path = 'C:\\QuickBooks\\'.$file_name;
$csv= file_get_contents($file_path);
$utf8_csv = utf8_encode($csv);
$array = array_map("str_getcsv", explode("\n", $utf8_csv));
$json = json_encode($array, JSON_PRETTY_PRINT);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($json))
);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('data' => $json));
$result = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($status == 200)
echo "Post Successfully!";
(更新)
这是我的路线
// API Version 2
Route::group(array('prefix' => 'api_v2'), function()
Route::post('url/post', array('before' => 'api_v2', 'uses' => 'UrlController@post'));
Route::get('url/reveive', array('before' => 'api_v2', 'uses' => 'UrlController@receive'));
Route::get('url/store', array('before' => 'api_v2', 'uses' => 'UrlController@store'));
);
【问题讨论】:
【参考方案1】:建议你使用返回的HTTP状态码来判断请求是否成功:
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($status == 200)
echo "Post Successfully!";
我也认为有些事情不太正常,因为dd($result)
显示的是 404 页面。可能没有路由匹配POST http://localhost/api_v2/url?key=***
编辑
我不是 curl 专家,但据我所知,您应该将该数据作为数组传递:
curl_setopt($ch, CURLOPT_POSTFIELDS, array('data' => $json));
在另一端,您可以这样检索它:
$data = json_decode(Input::get('data'));
编辑 2
在单个路由上使用 CSRF 过滤器:
Route::post('url/post', array('before' => 'csrf|api_v2', 'uses' => 'UrlController@post'));
或者对某个 HTTP 动词使用 CSRF(如果需要,还可以使用前缀)
Route::when('*', 'csrf', array('post'));
【讨论】:
请允许我再做一次dd($result)
。我会告诉你结果,但是谢谢你的回答,到目前为止我得到了Post Successfully!
根据`Route::get('url/post', array('before' => 'api_v2', 'uses' => 'UrlController@post'));` - 我应该将Route::get
替换为Route::post
- 你对此有何看法?
是的。此外,如果您仍然向 http://localhost/api_v2/url?key=***
发出请求,则需要从路由 url 中删除 post
段。
好的,我会把它取下来。你介意告诉我如何检索我刚刚发布的内容吗? IMO - 我认为这是判断您是否正确发布的方法是接收您发布的内容您不这么认为吗?
注意,如果您在浏览器中输入 URL,您将发出 GET 请求。有工具和浏览器扩展来模拟 POST 和其他请求...以上是关于如何确定使用 PHP cURL 发布 JSON 是不是成功?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 cURL/PHP 使用 PUT 方法将 JSON 数据发送到 API
Curl 和 PHP - 如何通过 curl 通过 PUT、POST、GET 传递 json