ファイルをアップロードするために CURL を使用して HTTPHEADER を設定した経験のある人はいますか?
アドバイスをお願いします
PS: ファイル名は「@」ではありませんが、Content-Type: application/octet-stream
ディスカッションへの返信 (解決策)
curl はこのメソッドをサポートしていません。自分でデータを構築する必要があります。私は調査しました
curlはこのメソッドをサポートしていません。データパケットを自分で構築する必要があります。調べてみました
例はありますか?
http://cn.php.net/fsockopen
CTRL + F を押して境界を検索するだけです。CURL では問題なく構築できるはずです。同じリクエストヘッダー。
プロジェクトでcurlを使用するいくつかの方法をまとめます
1. phpのcurlのデフォルトの呼び出しメソッド、getメソッドでURLにアクセスします
Javaコード
....
$ch =curl_init()
curl_setopt($ch, CURLOPT_HTTPHEADER; , $header); //http ヘッダーを設定します
curl_setopt($ch, CURLOPT_ENCODING, "gzip" ) //gzip 圧縮をサポートするようにクライアントを設定します
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); //
curl_setopt ($ch, CURLOPT_URL, $url);
curl_exec($ch);
if ($error =curl_error($ch)) {
//エラー処理
return -1 }
fclose($fp) ;
$curl_code =curl_getinfo($ch, CURLINFO_HTTP_CODE); //http 戻り値を取得
if($curl_code == 200) {
//通常のアクセス URL
}
//例外
....
. .. .
$ch =curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); // http ヘッダーを設定します
curl_setopt($ch, CURLOPT_ENCODING, "gzip"); // gzip 圧縮のサポートを設定しますclient
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30 ); // 接続待機時間を設定します
curl_setopt($ch, CURLOPT_URL, $url ); {
// エラー処理
return -1; $curl_code == 200 ) {
//通常のアクセス URL
}
//例外
....
2. lighttpd サーバーへのcurl アクセスをサポートするように http ヘッダーを設定します
Java コード
$header[]= 'Expect:';
$header[]= 'Expect:';
3. 本文ではなく http ヘッダーのみを取得するようにcurlを設定します:
Java コード
curl_setopt($ch , CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
Java コード
curl_setopt($ch, CURLOPT_HEADER, 0); // 本体を取得することを確認します
curl_setopt($ch, CURLOPT_NOBO DY, 0) ; // を取得することを確認しますbody
curl_setopt($ch, CURLOPT_NOBODY, 0);
4. 仮想ホストにアクセスするには、Host を設定する必要があります
$header[] = 'Host : '.$host; 5. post、 put、delete などで URL にアクセスします
post:
curl_setopt($ch, CURLOPT_POST, 1);
put、delete:
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); // または PUT、サーバーはこれらのメソッドをサポートする必要があります。
6. ダウンロードしたコンテンツをファイルとして保存します
curl_setopt($ch, CURLOPT_FILE, $fp);
プロジェクト内でのcurlの使用方法をいくつかまとめます
1. phpのデフォルトの呼び出しメソッドcurl、URLにアクセスするgetメソッド
Java コード
....
$ch =curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //http ヘッダーを設定します
curl_setopt($ch, CURLOPT_ENCO....
It CURLOPT_HTTPHEADER は使用されていないようです
CTRL + F でファイルアップロード用の http リクエストヘッダーを作成するだけです。 CURL を使用して同じリクエスト ヘッダーを作成するのは問題ありません
ありがとう、CURL はこのアップロード メソッドをサポートしていませんか?
たぶんもっと複雑なので、curl は作業を終了して '@' を提供します。ヘッダーとデータを自分で構築する方法
しかし、curl はファイルのアップロードを表すために CURLOPT_UPLOAD を提供しますが、実際には PUT リクエストが使用されます
これはファイルを ftp にアップロードする場合にのみ適しています
php では、php:/ から読み取る必要があります。 /input
#5 で指定されたコードを使用すると、このエラーのような認識できないリクエストが生成され、ファイルのアップロードに関する部分をコメントアウトしますが、それでもこのエラーが発生します
ただし、curl PUT メソッドと比較すると、違いはないようです
わかりました、このように書くだけです!
$contents =<<< 'TEXT'数据报中应该是Content-Disposition: form-data; name="userfile"; filename="file_name"Content-Type: 文档类型文件内容这样的格式,我只实现了文件名部分,文档类型不知道如何实现。这样上传后就取不到 type 的值curl_upload_server.php<xmp><?phpprint_r($_FILES);echo "文件内容:\n";$p = current($_FILES);readfile($p['tmp_name']);TEXT;$fields['f"; filename="x.x'] = $contents; //这个关联键的写法很怪异吧?$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://localhost/curl_upload_server.php"); curl_setopt($ch, CURLOPT_POST, 1 );curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$s = curl_exec ($ch); curl_close ($ch); echo $s;
これは
$varname = 'my';$name = '3.txt';$type = 'text/plain';$key = <<< TEXT$varname"; filename="$nameContent-Type: $typeTEXT;$fields[$key] = $contents;型であることがわかりました 注: 私は win 環境で使用しており、Linux 環境では n を rn に置き換える必要があります。
初期の頃は sun は ms に勝てなかったし、今も無理ですよね
アップロードされたファイルの型は php で認識されると思っていましたが、実際には提供されていることがわかりました。ブラウザによる
$varname = 'my';
$key = $varname"; filename="$name
Content-Type: $type
TEXT;
$fields[$key] = $contents;
注: これは、Win の下です...
ありがとうございます。HTTPPHEADER 情報を結合することによる CURL アップロードのより完全な POST 例はありますか?
#10 は
curl_upload_server.php です
$p = current($_FILES);
readfile($p['tmp_name']);
この投稿は 2012-04-10 13:19:42 に xuzuning によって最終編集されました
完全なコード
$contents =<<< 'TEXT'数据报中应该是Content-Disposition: form-data; name="userfile"; filename="file_name"Content-Type: 文档类型文件内容这样的格式以下是服务器端代码curl_upload_server.php<xmp><?phpprint_r($_FILES); //检查上传信息echo "文件内容:\n";$p = current($_FILES);readfile($p['tmp_name']); //输出上传的文件TEXT;$varname = 'my';$name = '3.txt';$type = 'text/plain';$key = "$varname\"; filename=\"$name\r\nContent-Type: $type\r\n";$fields[$key] = $contents;$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://localhost/curl_upload_server.php"); curl_setopt($ch, CURLOPT_POST, 1 );curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$s = curl_exec ($ch); curl_close ($ch); echo $s;
http ファイル アップロード プロトコル、主に境界 、これは、ファイルのコンテンツとタイプを識別するトークンであり、その他の点は通常の POST 送信と変わりません。
fsockopen を使用して http リクエストを記述するのは比較的簡単です。curl を使用して、対応するリクエスト ヘッダーと本文をシミュレートするだけです。
<?php//what file you want to upload$uploadFile = file_get_contents("/var/www/index.html");//content boundary $boundary = md5(time());$postStr = "";$postStr .="--".$boundary."\r\n";$postStr .="Content-Disposition: form-data; name=\"uptxt\"; filename=\"index.html\"\r\n";$postStr .="Content-Type: text/html\r\n\r\n";$postStr .=$uploadFile."\r\n";$postStr .="--".$boundary."\r\n"; /** use fsockopen to set upload http header and body **/$fp = fsockopen("localhost","80",$errer,$errno,1);fwrite($fp,"POST /upload.php HTTP/1.0\r\n");fwrite($fp,"Content-Type: multipart/form-data; boundary=".$boundary."\r\n");fwrite($fp,"Content-length:".strlen($postStr)."\r\n\r\n");fwrite($fp,$postStr);while (!feof($fp)){ echo fgets($fp, 128);}fclose($fp);/** use curl instead **/$cl = curl_init('http://localhost/upload.php');$boundary = md5(time());curl_setopt($cl,CURLOPT_POST,true);curl_setopt($cl,CURLOPT_HTTPHEADER,array( "Content-Type: multipart/form-data; boundary=".$boundary));curl_setopt($cl,CURLOPT_POSTFIELDS,$postStr);curl_setopt($cl,CURLOPT_RETURNTRANSFER,true);$content = curl_exec($cl);curl_close($cl);echo $content;?>Upload.php
<?php print_r($_FILES);?>
結果
HTTP/1.1 200 OKServer: nginx/0.8.54Date: Tue, 10 Apr 2012 05:22:01 GMTContent-Type: text/htmlConnection: closeX-Powered-By: PHP/5.3.10Array( [uptxt] => Array ( [name] => index.html [type] => text/html [tmp_name] => /tmp/phpKHfxkY [error] => 0 [size] => 344 ))Array( [uptxt] => Array ( [name] => index.html [type] => text/html [tmp_name] => /tmp/phpB0se13 [error] => 0 [size] => 344 ))
完全なコード PHP コード
$contents = データグラムは次のようになります
Content-Disposition: form -data ; name="userfile"; filename="file_name"
Content-Type: ドキュメント タイプ
このような形式
以下はサーバー側のコードです
print_r(……
クライアントがありませんか?
完全なコード PHP コード
$contents = データグラムは次のようになります
Content-Disposition: form-data; name="userfile" ; filename="file_name"
Content-Type: ドキュメントの種類
ファイルの内容
このような形式 以下はサーバー側のコードです
curl_upload_server.php
print_r(……
;
ほとんどは個別に開発するのが良いです、ありがとう
http文件上传协议,主要是那个boundary,这个东西就是标识一个文件的内容和类型以及各种上传参数的token,其它和普通的POST提交也没啥区别。
fsockopen来写http请求就比较直白,用curl的话模拟对应的请求头和body就好了。
PHP code
//what file you want to upload
$uploadFile = file_get_……
非常感谢,CURL部分的代码我这边测试成功了,我再加一百分
#14 服务器端
#15 客户端
#14 中的 $contents 是待上传的文件内容
上次好像看到你问的是一个文件切分多份,然后上传,如果是这样的话,你要要做的只是用boundary标识多个上传内容区块。比如
$boundary = md5(time());$postStr = "";$postStr .="--".$boundary."\r\n";$postStr .="Content-Disposition: form-data; name=\"uptxt[]\"; filename=\"index_1.html\"\r\n";$postStr .="Content-Type: text/html\r\n\r\n";$postStr .=$uploadFile."\r\n"; #这里是部分文件内容$postStr .="--".$boundary."\r\n";$postStr .="--".$boundary."\r\n";$postStr .="Content-Disposition: form-data; name=\"uptxt[]\"; filename=\"index_2.html\"\r\n"; $postStr .="Content-Type: text/html\r\n\r\n";$postStr .=$uploadFile."\r\n";#这里是部分文件内容$postStr .="--".$boundary."\r\n";
收藏了!
to #21
你这样做是不行的,应该使用 curl_multi 并发
不然把一个文件拆成几个, 一次性传出,再在服务器端组装。有什么意义?
上次好像看到你问的是一个文件切分多份,然后上传,如果是这样的话,你要要做的只是用boundary标识多个上传内容区块。比如
PHP code
$boundary = md5(time());
$postStr = "";
$postStr .="--".$boundary."\r\n";
$postStr .="Content-Disposition: form-data; name=……
我用了个循环来做
引用 21 楼 的回复:
上次好像看到你问的是一个文件切分多份,然后上传,如果是这样的话,你要要做的只是用boundary标识多个上传内容区块。比如
PHP code
$boundary = md5(time());
$postStr = "";
$postStr .="--".$boundary."\r\n";
$postStr .="Content-Dispositi……
感谢,curl_multi很有用
to #21
你这样做是不行的,应该使用 curl_multi 并发
不然把一个文件拆成几个,一次性传出,再在服务器端组装。有什么意义?
说的也是哈,不过curl_multi的并发,对于请求不同的url后获取数据比较有意义,就是说是并行请求不同的url获取http返回。如果往同一url请求,要么就一次请求,要么就分发多次请求,多次请求有个性能消耗在于每次都要scoket连接/销毁,但是能控制请求字节数。
引用 23 楼 的回复:
to #21
你这样做是不行的,应该使用 curl_multi 并发
不然把一个文件拆成几个,一次性传出,再在服务器端组装。有什么意义?
说的也是哈,不过curl_multi的并发,对于请求不同的url后获取数据比较有意义,就是说是并行请求不同的url获取http返回。如果往同一url请求,要么就一次请求,要么就分发多次请求,多次请求有个性能消耗在于每……
忘了如果服务器支持keep-alive的话,无需进行多次socket create,呵呵
一路上传不能充分利用网络资源,多路并发可使上传速度加快
引用 26 楼 的回复:
引用 23 楼 的回复:
to #21
你这样做是不行的,应该使用 curl_multi 并发
不然把一个文件拆成几个,一次性传出,再在服务器端组装。有什么意义?
说的也是哈,不过curl_multi的并发,对于请求不同的url后获取数据比较有意义,就是说是并行请求不同的url获取http返回。如果往同一url请求,要么就一次请求,要么就分发多……
嗯,基本上都支持keep-alive了
一路上传不能充分利用网络资源,多路并发可使上传速度加快
嗯,网络利用率更高
CSDN的编辑器还是没改进,同时回复多个还需要手动复制代码。。。
嗯,服务器可开多线程/进程处理你的并发上传请求,这是快的缘故。
十分なリソースがある限り、あと数チャネル開いても問題ありません。多くても、そのほとんどがブロックされていれば、単一チャネルと同等になります。
マルチチャネル送信用に設計する利点は、次のとおりです。データの特定のセグメントの送信に失敗した場合、再送信できること。
これはシングルチャネル送信設計では不可能です
http://cn.php.net/fsockopen
CTRL + F 検索境界、例を見てください。ファイルアップロード用の http リクエストヘッダーを構築するだけです。 CURL で同じリクエスト ヘッダーを構築しても問題ないはずです。
PHP マニュアルに従って実行しましたが、うまくいきませんでした
5 階の回答から引用:
http://cn.php.net/fsockopen
CTRL + F 境界を検索し、例を見て、ビルドしますアップロードするファイル http リクエスト ヘッダーだけで十分です。CURL が同じリクエスト ヘッダーを問題なく構築できるのは当然です。
PHP マニュアルに従ってみたのですが、うまくいきませんでした
そうですか? Wireshark、smartsniff、その他のツールを使用して http リクエスト フォーマットをチェックし (firebug または chrome に付属の F12 キーでも機能するはずです)、ファイル アップロード アクションを実行して、ファイルがアップロードされたときに http リクエスト フォーマットを観察することもできます。
ソケット コードを投稿します:
私がテストしたバックアップ!
http://webinno.cn/blog/article/view/40
CURLOPT_HEADERFUNCTION このパラメータは HTTP プロトコルのコールバックを設定でき、参照できます
いくつかのパラメータを設定している限り、curl はプロトコルヘッダー自体
皆さん、ありがとう!
ダウンロードを提供するために Content-Type のみを使用しました
悪くありません。 ! ! ! ! !
私も欲しいです

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
