簡體   English   中英

在PHP中使用CURL發出PUT請求

[英]Making a PUT request using CURL in PHP

我正在使用PHP 5.3.6,看來我無法使用CURL進行PUT要求以僅將字符串字符串進行放置。

function put_data($url, $data)
{   
  $useragent="SimpleAgent-1.0";
  $fh = fopen('php://memory', 'rw');
  fwrite($fh, $data);
  rewind($fh);$ch = curl_init();
  curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  curl_setopt($ch, CURLOPT_INFILE, $fh);
  curl_setopt($ch, CURLOPT_INFILESIZE, strlen($data));
  curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  curl_setopt($ch, CURLOPT_PUT, 1);
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $result = curl_exec($ch);
  curl_close($ch);
  fclose($fh);

  return $result;
}

在這里,$ data是我要放入的字符串。 不起作用,並返回以下錯誤:

500內部服務器錯誤服務器已錯誤或無法執行請求的操作。

預期的字符串或緩沖區

我只能使用所使用的版本將數組作為數據傳遞。 所以這就是我現在正在做的:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
curl_setopt($ch, CURLOPT_COOKIE, $curl_cookie);
$arr = array();
if (isset($data)) {
    $arr['my_data'] = $data;
}

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($arr));
curl_exec($ch);

我使用了您的代碼,因此定義了一個url,並用字符串填充了數據,並且所有工作均按預期進行。 我被網站拒絕了,因為沒有接收端可以處理看跌期權。 要輕松獲取信息,只需添加以下行: curl_setopt($ch, CURLOPT_VERBOSE, true);

你會得到類似的東西:

* About to connect() to yyyy.xxxx.com port 80 (#0)
*   Trying 62.221.196.28...
* connected
* Connected to yyyy.xxxx.com (zz.221.196.28) port 80 (#0)
> PUT / HTTP/1.1
User-Agent: SimpleAgent-1.0
Host: yyyy.xxxx.com
Accept: */*
Content-Length: 14
Expect: 100-continue

< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 405 Method Not Allowed
< Date: Thu, 09 Feb 2012 19:46:28 GMT
< Server: Apache
< Allow: GET,HEAD,POST,OPTIONS
< Vary: Accept-Encoding
< Content-Length: 231
< Content-Type: text/html; charset=iso-8859-1
< 
* Connection #0 to host yyy.xxxx.com left intact
* Closing connection #0

從日志記錄中可以看到,請求已發出,但是當您要放置數據時,apache設置不允許您將數據放置到該url中。 因此,根據服務器的不同,您將必須處理一個接受PUT的接收URL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM