単純なファイルダウンロードテスト。働いていない。プロバイビーは会社の代理人のため。プロキシを設定するにはどうしたらいいですか? "127.0.0.1:8080"を追加する前に、私はいつもエラー7を受け取りました:サーバーに接続できませんでした。今ではいつもリターンコード0が返ってきますが、テストファイルjson.txtには404しか含まれていません。しかし、私のブラウザでは明らかにURLが働いています。私もthis経由でシステムからプロキシ設定を取得しようとしましたが、失敗しました。インターネットの設定がプロキシを検出するwpad.dat
ファイルを使用するように設定されているプロキシの背後にあるcURL 404
CURL *curl;
FILE *fp;
char url[] = "http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getMakes&year=2010&sold_in_us=1";
char outfilename[FILENAME_MAX] = "C:\\temp\\json.txt";
curl = curl_easy_init();
if (curl) {
fp = fopen(outfilename,"wb");
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_NOBODY, true);
curl_easy_setopt(curl, CURLOPT_HEADER, true);
curl_easy_setopt(curl, CURLOPT_HTTPGET, true);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(curl, CURLOPT_PROXY, "127.0.0.1:8080");
res = curl_easy_perform(curl);
cout << "Curl response code " << res << ": " << curl_easy_strerror(res) << endl;
curl_easy_cleanup(curl);
fclose(fp);
}
UPDATE:
HTTP/1.1 404 Not Found
Connection: Keep-Alive
Server: Embedthis-http
ETag: "0-0-56d6b6ea"
Cache-Control: no-cache
Last-Modified: Wed, 02 Mar 2016 09:48:26 GMT
Date: Fri, 19 May 2017 14:33:57 GMT
Content-Length: 167
Keep-Alive: timeout=60, max=199
<!DOCTYPE html>
<html><head><title>Not Found</title></head>
<body>
<h2>Access Error: 404 -- Not Found</h2>
<pre>Cannot locate document: /</pre>
</body>
</html>
は、ここに私のcURLの試みです。そのうちの1つを入力すると、サーバーからの応答が返ってくるが、Webサイトがブロックされているためアクセスが拒否されたという。しかし私のブラウザはこのサイトを表示することができます。
逆に、netsh.exe winhttp show proxy
と入力すると、現在のwinhttpプロキシ設定は「直接アクセス(プロキシサーバーなし)」と表示されます。
UPDATE私は最終的にそれがそれらのオプションで作業しまった2
:より有用出力を得るためにVerbose
を使用します。出力はnegotiate
とntlm
のようないくつかのauthメソッドを示しました。 ntlm
オプションは機能しませんでしたが、negotiate
と、システムから資格情報を取得するユーザコード:
(libcurlにsspiモジュールがある場合)があります。
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(curl, CURLOPT_HEADER, 1);
curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_easy_setopt(curl, CURLOPT_PROXY, <"host:port">);
curl_easy_setopt(curl, CURLOPT_PROXYAUTH, CURLAUTH_NEGOTIATE);
curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, ":");
で再試行することができます。 – user2366975