0

正気を失います

私は、cURL POST リクエストを返そうとして、人生の一部を失い、多くの正気を失いました。ヘッダーを削除できないことを除いて、すべて正常に動作します。ああ、私は試しました

curl_setopt($ch, CURLOPT_HEADER, false);

私が試してみると、さらに悪いことに

$headerLength = curl_getinfo($ch, CURLINFO_HEADER_SIZE);

完全に間違っている 25 が返されます。私がこれで頭がいっぱいになっているのを助けてください。

だから私はこのメソッドを呼び出します

      $service = new RestfulService($Url1);
      $response = $service->request('', 'POST', $tokenXml, null,
array(CURLOPT_SSL_VERIFYPEER => false, 
CURLOPT_ENCODING =>'UTF-8'));

次に呼び出すもの (SilverStripe フレームワークを使用)

public function curlRequest($url, $method, $data = null, $headers = null, $curlOptions = array()) {
    $ch        = curl_init();
    $timeout   = 5;
    $sapphireInfo = new SapphireInfo(); 
    $useragent = 'SilverStripe/' . $sapphireInfo->Version();
    $curlOptions = $curlOptions + (array)$this->config()->default_curl_options;

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    if(!ini_get('open_basedir')) curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    //include headers in the response
    curl_setopt($ch, CURLOPT_HEADER, true);

    // Add headers
    if($this->customHeaders) {
        $headers = array_merge((array)$this->customHeaders, (array)$headers);
    }

    if($headers) curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    // Add authentication
    if($this->authUsername) curl_setopt($ch, CURLOPT_USERPWD, $this->getBasicAuthString());

    // Add fields to POST and PUT requests
    if($method == 'POST') {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    } elseif($method == 'PUT') {
        $put = fopen("php://temp", 'r+');               
        fwrite($put, $data);
        fseek($put, 0); 

        curl_setopt($ch, CURLOPT_PUT, 1);
        curl_setopt($ch, CURLOPT_INFILE, $put);
        curl_setopt($ch, CURLOPT_INFILESIZE, strlen($data)); 
    }

    // Apply proxy settings
    if(is_array($this->proxy)) {
        curl_setopt_array($ch, $this->proxy);
    }

    // Set any custom options passed to the request() function
    curl_setopt_array($ch, $curlOptions);

    // Run request
    $rawResponse = curl_exec($ch);
    if (curl_error($ch))    var_dump(curl_error($ch));


    $response = $this->extractResponse($ch, $rawResponse);
    curl_close($ch);
    return $response;
}

応答をダンプすると、ヘッダーの削除コマンドは最初の数文字のみを削除します。そのようです...

object(RestfulService_Response)[1065]
  protected 'simpleXML' => null
  protected 'cachedResponse' => boolean false
  protected 'statusCode' => int 100
  protected 'statusDescription' => string 'Continue' (length=8)
  protected 'headers' => 
    array (size=0)
      empty
  protected 'body' => string 'ontrol: no-cache

Pragma: no-cache

Content-Length: 3593

Content-Type: application/soap+xml; charset=utf-8

Expires: Fri, 20 Sep 2013 01:14:14 GMT

Server: Microsoft-IIS/7.5

P3P: CP="DSP CUR OTPi IND OTRi ONL FIN"

X-XSS-Protection: 0

PPServer: PPV: 30 H: CO1IDOLGN62 V: 0

Date: Fri, 20 Sep 2013 01:15:13 GMT

Connection: close



�&lt;?xml version="1.0" encoding="utf-8" ?><S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envel

前の変なキャラと何か関係あるの?

更新: 同僚のコンピューターでこのコードを確認しましたが、問題はありません。私は WAMP を実行しています。私の同僚は MAC を使用しています。セットアップに問題がある可能性はありますか? 最新のcurl.dllをダウンロードしてphpライブラリに追加しましたが、まだ葉巻はありません。

何か案は???

4

1 に答える 1

-1

私の場合、エンコーディングが間違っていたので、次のオプションを追加する必要がありました

curl_setopt($ch, CURLOPT_SSLVERSION, 3)

今は正常に動作します

于 2013-09-27T03:28:09.357 に答える