2

"@mystr"POSTメソッドを使用してphpのような文字列を送信しようとしていますCURLが、次のコードで送信するだけの場合:

        $url_str = $url->getUrl();
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url_str);
        curl_setopt($ch, CURLOPT_POST, count($fields));
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:multipart/form-data']);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

        $out = curl_exec($ch);
        curl_close($ch);

次のようなエラーがスローされます。

非推奨: curl_setopt(): ファイルのアップロードに @filename API を使用することは非推奨です。代わりに CURLFile クラスを使用してください...

注: $fields は次のようなものです。

$fields=['chat_id'=>'@someusername','text'=>'hello'];

電報ボットAPI用です。GETメソッド%40の代わりに使用すると問題なく@、電報はメッセージをチャネルに送信しますが、POSTメソッドを使用する必要があります。

@CURL で始まる文字列を送信する方法はありますか?

4

1 に答える 1

3

ここで解決策を見つけました: http://php.net/manual/en/function.curl-setopt.php

CURLOPT_SAFE_UPLOAD

CURLOPT_POSTFIELDS でファイルをアップロードするための @ プレフィックスのサポートを無効にする場合は TRUE。これは、@ で始まる値をフィールドとして安全に渡すことができることを意味します。代わりに、CURLFile をアップロードに使用できます。

デフォルト値として FALSE で PHP 5.5.0 に追加されました。PHP 5.6.0 では、デフォルト値が TRUE に変更されています。

    $url_str = $url->getUrl();
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SAFE_UPLOAD, TRUE); //<- HERE
    curl_setopt($ch, CURLOPT_URL, $url_str);
    curl_setopt($ch, CURLOPT_POST, count($fields));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:multipart/form-data']);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

    $out = curl_exec($ch);
    curl_close($ch);
于 2015-11-16T20:11:04.013 に答える