API 请求适用于 cURL 但不适用于 Guzzle?

神经网络

我正在努力让这个请求生效,这是我第一次与 Guzzle 合作,我不知道我在这里做错了什么。该请求适用于 cURL,但不适用于 Guzzle:

狂饮:

$res = $client->request('POST', 'https://api.bol.com/retailer/offers', [
            'headers' => [
                'Authorization' => 'Bearer ' . $jwt,
                'Accept' => 'application/vnd.retailer.v5+json',
                'content-type' => 'application/vnd.retailer.v5+json'
            ],
            'body' => json_encode(array(
                'ean' => (string)$item->ean_number,
                'condition' => [
                    'name' => 'NEW',
                ],
                'reference' => 'NS-'.(string)$item->ean_number,
                'unknownProductTitle' => (string)$item->name,
                'pricing' => [
                    'bundlePrices' =>[
                        'quantity' => 1,
                        'unitprice' => round($item->default_price->price * 1.21, 2)
                    ],
                ],
                'stock' => [
                    'amount' => (int)$item->stock,
                    'managedByRetailer' => false,
                ],
                'fulfilment' => [
                    'method' => 'FBR',
                    'deliveryCode' => '2-3d',
                ]
            ))
        ]);

卷曲:

$productjson[] = array(
          'ean' => $data[4],
          'condition' => array('name' => 'NEW', 'category' => 'NEW'),
          'onHoldByRetailer' => 'false',
          'reference' => "dy".$data[4],
          'unknownProductTitle' => $data[1],
          'pricing' => array('bundlePrices' => array('quantity' => 1, 'unitPrice' => $data[12])),
          'stock'=> array('amount' => $data[13], 'managedByRetailer' => false),
          'fulfilment' => array('method' => 'FBR', 'deliveryCode' => '2-3d')
        );
        $productjson = json_encode($productjson[0], JSON_FORCE_OBJECT);
        $response = callAPI('POST', $bearer, 'https://api.bol.com/retailer/offers', $productjson);
function callAPI($method, $bearer, $url, $data, $accept = 'application/vnd.retailer.v4+json', $ignoreheaders = false){
  $curl = curl_init();

  if(!$ignoreheaders){
  
  curl_setopt($curl, CURLOPT_HEADER, true);
  }
  switch ($method){
     case "POST":
        curl_setopt($curl, CURLOPT_POST, 1);
        if ($data)
           curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        break;
     case "PUT":
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
        if ($data)
           curl_setopt($curl, CURLOPT_POSTFIELDS, $data);                               
        break;
        case "DELETE":
          curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
          if ($data)
             curl_setopt($curl, CURLOPT_POSTFIELDS, $data);                             
          break;
     default:
        if ($data)
           $url = sprintf("%s?%s", $url, http_build_query($data));
  }
  // OPTIONS:
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: '.$accept, 'Content-Type: '.$accept,
  'Authorization: Bearer '.$bearer));
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  // EXECUTE:
  $result = curl_exec($curl);
  if(!$ignoreheaders){
  if (strpos($result, 'JWT') !== false) {
    $responses[] = 'Epired JWT:'.$result;
    $bearer = callBearer('POST', 'https://login.bol.com/token?grant_type=client_credentials', NULL);
    $result = curl_exec($curl);
  }
  if(strpos($result, '504') !== false){
    $responses[] = '504 error:'.$result;
    sleep(1.1);
    $bearer = callBearer('POST', 'https://login.bol.com/token?grant_type=client_credentials', NULL);
    $result = curl_exec($curl);
  }
  if(strpos($result, 'FAILURE') !== false){
    $responses[] = 'FAILURE:'.$result;
    sleep(1.1);
    $bearer = callBearer('POST', 'https://login.bol.com/token?grant_type=client_credentials', NULL);
    $result = curl_exec($curl);
  }
  $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
  $header = substr($result, 0, $header_size);
  $body = substr($result, $header_size);

  $result = json_decode($body);
  return $result;
}

这可能真的很愚蠢,但我基本上只是在问:我如何使用 guzzle 执行工作 cURL 请求?因为我的 guzzle 请求返回 400 bad request 错误。

哈里达山

试图改变bodyjson和传递数组代替JSON编码的字符串,狂饮将以此阵列内部转换为JSON的护理

$res = $client->request('POST', 'https://api.bol.com/retailer/offers', [
    'headers' => [
        'Authorization' => 'Bearer ' . $jwt,
        'Accept' => 'application/vnd.retailer.v5+json',
        'content-type' => 'application/vnd.retailer.v5+json'
    ],
    'json' => array(
        'ean' => (string)$item->ean_number,
        'condition' => [
            'name' => 'NEW',
        ],
        'reference' => 'NS-'.(string)$item->ean_number,
        'unknownProductTitle' => (string)$item->name,
        'pricing' => [
            'bundlePrices' =>[
                'quantity' => 1,
                'unitprice' => round($item->default_price->price * 1.21, 2)
            ],
        ],
        'stock' => [
            'amount' => (int)$item->stock,
            'managedByRetailer' => false,
        ],
        'fulfilment' => [
            'method' => 'FBR',
            'deliveryCode' => '2-3d',
        ]
    )
]);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

cURL请求不适用于提取API中的数据

Curl 请求适用于控制台,但不适用于 PHP

PHP - GET 请求适用于 Postman,但不适用于 cUrl

向api发送请求适用于Android,但不适用于IOS。Xamarin

Rest API调用可与curl配合使用,但不适用于PowerShell

cURL适用于我的REST API,但Guzzle不起作用

POST Request适用于Postman,但不适用于Guzzle

我的 API 调用适用于邮递员,但不适用于 curl,因为它无法读取查询参数

文件上传适用于 curl 和邮递员,但不适用于 python 请求

会员API仅在walmart.io“尝试API”页面上有效,但不适用于每个curl请求

cURL调用适用于数字,但不适用于包含数字的变量

cURL 命令适用于 linux 但不适用于 windows

Alfresco 基本身份验证适用于 curl 但不适用于 python

RESTful API 请求适用于 Python 和浏览器,但不适用于 VB.Net

对外部 API 的 HTTP 请求适用于 .NET,但不适用于 React(CORS 问题)

Google Analytics API请求适用于失眠/邮递员,但不适用于网络应用

payapl nvp api(退款)在通过表单使用时有效,但不适用于curl

intent.getParcelableExtra()适用于API 23,但不适用于API 25

AllowAnyMethod适用于某些API调用,但不适用于其他API调用

Android:代码适用于 api 19 但不适用于 api 24

GET curl请求仅适用于邮递员,不适用于php

POST 请求使用 curl 但不适用于 Javascript Web 组件

docker 子域 api.localhost 适用于 chrome 但不适用于终端

React Native HTTPS Api 调用适用于 IOS,但不适用于 Android

进度条适用于Android API 23,但不适用于21或22

API适用于Postman,但不适用于浏览器

Particle Photon API:获取客户令牌适用于 Postman 但不适用于 axios

googlemaps api适用于python终端,但不适用于脚本

对Web-api的ajax调用适用于GET,但不适用于POST