CURL Эквивалент Жадность - PullRequest
       48

CURL Эквивалент Жадность

0 голосов
/ 19 апреля 2020

Я могу успешно загрузить изображение в API, используя запрос CURL. Но когда я пытаюсь с Guzzle Client код работает, но загруженное изображение повреждено. Не могли бы вы помочь мне разобраться в проблеме. Я сомневаюсь, что что-то ограничивает размер содержимого файла. Игнорировать любые ошибки программирования c при копировании кода ниже, это работает для меня.

PHP CURL (работает)

class CurlRequest{

  private $m_curl=null;
  private $m_server="";

  public function init(){
    $this->m_curl = curl_init();
    if($this->m_curl==null)
      return(false);
    //---
    curl_setopt($this->m_curl, CURLOPT_SSL_VERIFYPEER,FALSE);                        // comment out this line if you use self-signed certificates
    curl_setopt($this->m_curl, CURLOPT_MAXCONNECTS,1);                               // one connection is used
    curl_setopt($this->m_curl, CURLOPT_HTTPHEADER,array('Connection: Keep-Alive'));
    curl_setopt($this->m_curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($this->m_curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    //---
    $this->m_server = "https://xxxxx.xxxxxx";
  }

  public function Post($path, $body)
  {
    if($this->m_curl==null)
      return(false);

    curl_setopt($this->m_curl,CURLOPT_POST,true);
    curl_setopt($this->m_curl,CURLOPT_URL, $this->m_server.$path);
    curl_setopt($this->m_curl,CURLOPT_POSTFIELDS,$body);
    curl_setopt($this->m_curl,CURLOPT_RETURNTRANSFER,true);
    $result=curl_exec($this->m_curl);
    if($result==false)
    {
      echo 'Curl POST error: '.curl_error($this->m_curl);
      return(false);
    }
    $code=curl_getinfo($this->m_curl,CURLINFO_CONTENT_TYPE);
    if($code!=200)
    {
      echo 'Curl POST code: '.$code;
      return(false);
    }
    return($result);
  }
}

$mt5 = new CMT5Request();
$img = file_get_contents('https://media.geeksforgeeks.org/wp-content/uploads/geeksforgeeks-22.png');
//--- Encode the image string data into base64
$data = base64_encode($img);
$response = $mt5->Post('/attachment_add',
                json_encode([[
                    'RelatedClient' => 2161,
                    'FileType' => "4",
                    'FileName' => "web_file.jpg",
                    'FileContent' => $data,
                    'FileHash' => "ujLgFcA5rLxgfu7pU3jSAw==",
                    "FileFlags" => "0"
                ]])
);

Версия Guzzle (загрузка работает, но изображение повреждено)

$request = new Client([
    'verify' => false,
    'base_uri' => "https://xxxxxxxxxx.xxxxxxx",
]);
$img = file_get_contents('https://media.geeksforgeeks.org/wp-content/uploads/geeksforgeeks-22.png');            //--- Encode the image string data into base64
$data = base64_encode($img);
$body = [[
                   'RelatedClient' => 2161,
                   'FileType' => "4",
                   'FileName' => "web_file.jpg",
                   'FileContent' => $data,
                   'FileHash' => "ujLgFcA5rLxgfu7pU3jSAw==",
                   "FileFlags" => "0"
               ]]
$response = $request->request("POST", "/add", ['json' => $body]);

В Guzzle я пробовал также "body", "form_params", но все тот же результат. Нужно ли устанавливать / включать какие-либо другие параметры в клиенте Guzzle?

Подробнее о POST Guzzle:

* Found bundle for host xxxxxxx.xxxxx: 0x5654118b8500 [can pipeline]
* Re-using existing connection! (#0) with host xxxxxxxx.xxxxxx
* Connected to xxxxxx.xxxxxx port 443 (#0)
> POST /attachment_add HTTP/1.1
Host: xxxxxx.xxxxxx
User-Agent: GuzzleHttp/6.5.1 curl/7.52.1 PHP/7.2.11
Content-Length: 61772

< HTTP/1.1 200 OK < Content-Length: 70 < Content-Type: application/json < * Curl_http_done: called premature==0 *
    Connection #0 to host xxxxxxx.xxxxxx left intact```
...