如何将http请求2梨码转换为curl php

时间:2015-09-04 09:15:38

标签: php api curl pear

我正在尝试使用curl而不是PHP中的http request 2 pear模块来查询Microsoft Project Oxford api。他们有一个现有的库,可以轻松调用他们的API,但它使用一个名为http request2的梨模块。我真的不知道如何在服务器上安装pear模块,所以我想只是重写它们库的某些部分才能使用curl。以下是我特别想要修改的代码部分:

// This sample uses the HTTP_Request2 package. (for more information: http://pear.php.net/package/HTTP_Request2)

require_once 'HTTP/Request2.php';
$headers = array(
   'Content-Type' => 'application/json',
);

$query_params = array(
   // Specify your subscription key
   'subscription-key' => '',
   // Specify values for optional parameters, as needed
   'visualFeatures' => 'All',
);

$request = new Http_Request2('http://api.projectoxford.ai/vision/v1/ocr?language=unk&detectOrientation =true');
$request->setMethod(HTTP_Request2::METHOD_POST);
// Basic Authorization Sample
// $request-setAuth('{username}', '{password}');
$request->setHeader($headers);

$url = $request->getUrl();
$url->setQueryVariables($query_params);
$request->setBody("{'Url':'https://oxfordportal.blob.core.windows.net/vision/OpticalCharacterRecognition/1.jpg'}");

    echo '<pre>';
        print_r($request);
    echo '</pre>';

try
{
   $response = $request->send();       
       echo '<pre>';
   print_r(var_dump(json_decode($response->getBody(), true)));
       echo '</pre>';
}
catch (HttpException $ex)
{
   echo $ex;
}

这是我到目前为止的代码:

$headers = array(
   'Content-Type' => 'application/json',
       'subscription-key' => ''          
);

/*
$query_params = array(     
      array('Url'=>'https://oxfordportal.blob.core.windows.net/vision/OpticalCharacterRecognition/1.jpg')        
);
*/

$query_params = '{ "Url": "https://oxfordportal.blob.core.windows.net/vision/OpticalCharacterRecognition/1.jpg"}';    

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://api.projectoxford.ai/vision/v1/ocr?language=en&detectOrientation =true');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query_params);  //Post Fields
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    

$ret_arr = curl_exec ($ch);

echo curl_error($ch);

curl_close ($ch);

但是它给了我HTTP错误400.请求格式错误。我的curl代码有什么问题?请帮忙......

2 个答案:

答案 0 :(得分:0)

试试这个

<?php

$headers = array(
   'Content-Type' => 'application/json',
       'subscription-key' => ''          
);

$query_params = '{ "Url": "https://oxfordportal.blob.core.windows.net/vision/OpticalCharacterRecognition/1.jpg"}'; 

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://api.projectoxford.ai/vision/v1/ocr?language=en&detectOrientation=true');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query_params);  //Post Fields
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    

$ret_arr = curl_exec ($ch);

var_dump($ret_arr);

echo curl_error($ch);

curl_close ($ch);

这会为我返回"statusCode": 401, "message": "Access denied due to missing subscription key. Make sure to include subscription key when making requests to an API."条消息。所以400错误至少得到解决。

您遇到的问题是由于CURLOPT_URL值中的空格。

答案 1 :(得分:0)

这有效:

$ch = curl_init();

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_URL, 'http://api.projectoxford.ai/vision/v1/ocr?language=unk&detectOrientation=true');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Host: api.projectoxford.ai',
    'Ocp-Apim-Subscription-Key: YOUR_API_KEY_HERE',
));
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"Url": "https://oxfordportal.blob.core.windows.net/vision/OpticalCharacterRecognition/1.jpg"}');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec ($ch);

echo "<h3>Request</h3>\r\n";
debug(curl_getinfo($ch));

echo "<h3>Response</h3>\r\n";
debug($response);
echo curl_error($ch);
curl_close ($ch);

function debug(){
    echo'<pre>';
    foreach(func_get_args()as $arg){
        ob_start();
        var_dump($arg);
        echo htmlentities(ob_get_clean())."</pre><hr>\r\n";
    }
}