使用cURL,PHP和基本身份验证进行问题

时间:2015-06-29 14:48:28

标签: php json post curl postman

我上周发了一篇类似的帖子,可以找到here。我遇到身份验证问题,我相信我已经解决了。错误消息至少是不同的。

我正在尝试通过在PHP中执行cURL命令来重新创建我通过POSTman向供应商发出的成功POST。

以下是其文档中的示例cURL命令:

curl -i -k -u '<api_key>': -XPOST --data-urlencode assessment_data@/path/to/test/file.json "https://<your_subdomain>.vendor.org/api/v1/import"; echo ""

这是我的PHP代码,不起作用:

<?php session_start();
include('../connect.php');
include('../functions.php');

function curlPost($url, $headers, $username, $password, $post) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CAINFO, 'certificate.pem');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    echo '<pre>';
    echo curl_exec($ch) . '<br><br>';
    echo print_r(curl_getinfo($ch)) . '<br><br>';
    echo curl_error($ch) . '<br><br>';
    echo '</pre>';
    curl_close($ch);
}

$data = 'JSON_object={"JSON_key":"JSON_value"}';

curlPost('https://company.vendor.org/api/v1/import',
    ['Content-Type: multipart/form-data'],
    'api-key',
    '',
    $data
);

而是产生这个输出:

{"success":false,"errors":["500 Internal Server Error"],"warnings":[],"info":[],"meta":[],"results":[]}

Array
(
    [url] => https://company.vendor.org/api/v1/import
    [content_type] => application/json; charset=utf-8
    [http_code] => 500
    [header_size] => 547
    [request_size] => 248
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 1.586493
    [namelookup_time] => 0.135777
    [connect_time] => 0.177182
    [pretransfer_time] => 0.286958
    [size_upload] => 1999
    [size_download] => 103
    [speed_download] => 64
    [speed_upload] => 1260
    [download_content_length] => 103
    [upload_content_length] => 1999
    [starttransfer_time] => 0.345878
    [redirect_time] => 0
    [redirect_url] => 
    [primary_ip] => xx.xxx.xx.xxx
    [certinfo] => Array
        (
         'This array is actually empty, I didn't delete anything.'
        )

    [primary_port] => 443
    [local_ip] => xxx.xxx.xx.xxx
    [local_port] => 60532
    [request_header] => POST /api/v1/import HTTP/1.1
Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Host: company.vendor.org
Accept: */*
Content-Type: multipart/form-data
Content-Length: 1999
Expect: 100-continue


)
1

为了更好的衡量,这里是一个使用POSTman成功POST的屏幕截图(它的审查略有不同,但我传递的信息完全相同):

enter image description here

他们的文档包含一个示例JSON对象,它们保存为文件并作为表单数据发送。我已设法使用实时数据重新创建对象,将其输出到格式正确的字符串,然后将其作为值发送。这适用于POSTman,但不适用于我的PHP,因此我怀疑问题存在于某种程度上。 CURLOPT_POSTFIELDS需要一个字符串(尝试过一个数组 - 它很生气),我尝试过以我能想到的方式格式化它。任何帮助将不胜感激。

0 个答案:

没有答案