0

XML データを処理のためにリモート サーバーに POST する必要があります。サーバー プロトコルは既に定義されており、変更できません。投稿したい XML データは、ローカル サーバーで実行されている PHP ページ内で動的に生成されます。ユーザーがその XML データをファイルに保存してから、そのファイルを参照してリモート サーバーにアップロードする必要はありません (これはユーザー フレンドリーでも無意味でもありません)。私の質問は、PHP 関数を使用してこれを行う方法です (「input file=」フィールドを使用して HTML フォームをコーディングすることで実行できますが、これはユーザーがファイルを参照する必要があることを意味します)。例が与えられました。必要なのは、例のヘッダーを正確に再現し、それをリモート サーバーに送信する PHP コードを作成することです。私を助ける手がかりはありますか?

POST http://doi.crossref.org/servlet/deposit?  operation=doMDUpload&login_id=USER&login_passwd=PSWD&area=live HTTP/1.1 
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */* 
Accept-Language: en-us Content-Type: multipart/form-data; boundary=---------------------------7d22911b10028e 
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461) 
Host: Myhost 
Content-length: 1304 Pragma: no-cache -----------------------------7d22911b10028e 
Content-Disposition: form-data; name="fname"; filename="crossref_query.xml" 
<?xml version="1.0" encoding="UTF-8"?> 

.....XML data....

-----------------------------7d22911b10028e--

私が試したものの成功しませんでした: XML データのフォームと input=hidden フィールド (POST されたデータにはファイル名が含まれていないため、リモート サーバーによって拒否されます)。http_post_data() - リモート サーバーで内部サーバー エラーが発生しました。fopensocketを使用した後、データストリームをハンドコーディングし、ポート80ソケットを介して送信します-送信したストリームをtcpdumpを使用して1文字ずつチェックした後でも、サーバーはストリームにPOSTされたフォームデータが含まれていることを認識しませんでした。お分かりのように、私は必死になっています!

4

2 に答える 2

0

つまり、ユーザーはブラウザウィンドウを開いており、ローカルサーバーからXMLファイルにアクセスでき(ブラウザはhttp経由でアクセスできると思います)、ブラウザを一種のトンネルとして機能させて通過させる必要があります。そのXMLファイルの内容はリモートサーバーまでですか?そして、リモートサーバーはそのローカルXMLファイルにアクセスできませんか?

セキュリティの問題により、これを行うことはほとんど不可能です。(あなたが閲覧している間、Yahooがあなたのローカルネットワークからランダムなファイルを引っ張ってほしくないでしょう?)

これは、ローカルサーバーがXMLを提供する方法をある程度制御できる場合にのみ実行できます。この場合、JSONPを利用してセキュリティの問題を回避し、ブラウザのページがデータをAJAX投稿としてリモートサーバーに送信できるようにすることができます。

于 2011-02-25T22:19:03.817 に答える
0

ここから...

 $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)");
    curl_setopt($ch, CURLOPT_URL, _VIRUS_SCAN_URL);
    curl_setopt($ch, CURLOPT_POST, true);
    // same as <input type="file" name="file_box">
    $post = array(
        "file_box"=>"@/path/to/myfile.jpg",
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
    $response = curl_exec($ch);
于 2011-02-25T22:08:20.760 に答える