Bing Ads API v8 の背景: 私の node.js スクリプトでは、SubmitGenerateReport オペレーションを使用して Campaign PerformanceReportRequest を作成しています。これは ID を返します。これを使用して、長い URL を返す PollGenerateReport を呼び出します。例:
https://download.api.bingads.microsoft.com/ReportDownloadAdCenterAPIDownload.aspx?q=M3poINDSV[約200文字削除]05GUMsXBg%3d
ブラウザまたは wget でその URL を取得すると、すぐに必要なファイルが返されます。
ブラウザを使えば「CampaignPerformanceReport_08_29_2013_11_06_54.zip」のようなわかりやすいファイル名も出てきます…wgetで-Oを指定してファイル名をつけています。
理想的には、zip ファイルを adm-zip にストリーミングして、その場で解凍する、またはそのような方法が必要です。
ただし、node https または node-request を使用して URL から response.statusCode プロパティを取得することさえできません。
ノードにいくつかの既知の ECONNRESET 問題があるという議論を検索して見ましたが、私が知る限り、それらは私の状況には当てはまらないようです。
私の現在の考えは、次のいずれかです。
.zip ファイルへの長い URL の応答がノードによって検出されない - リダイレクトを検出しようとしましたが、前述のように、statusCode を取得することさえできません。
Bing Ads API を満足させるために指定する必要があるヘッダーがあるのではないでしょうか?
関連するエラーを含むコードを次に示します。
ノード HTTPS の使用:
https.get(file_url, function(res) {
console.log("Got response: " + res.statusCode);
console.log("headers.location: " + res.headers.location);
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
約 35 秒後、次のエラーが返されます。
Got error: read ECONNRESET
.on エラーなしで、より詳細に:
events.js:72
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at errnoException (net.js:901:11)
at TCP.onread (net.js:556:19)
ノードリクエストの使用:
request(file_url, function (error, response, body) {
if (!response.statusCode == 200) {
console.log(response.statusCode)
}
});
約 35 秒後、次のエラーが返されます。
TypeError: Cannot read property 'statusCode' of undefined
at Request._callback (C:\Program Files\nodejs\testzipstream.js:35:18)
at self.callback (C:\Program Files\nodejs\node_modules\request\index.js:148:
22)
at Request.EventEmitter.emit (events.js:95:17)
at ClientRequest.self.clientErrorHandler (C:\Program Files\nodejs\node_modul
es\request\index.js:257:10)
at ClientRequest.EventEmitter.emit (events.js:95:17)
at CleartextStream.socketErrorListener (http.js:1528:9)
at CleartextStream.EventEmitter.emit (events.js:95:17)
at Socket.onerror (tls.js:1424:17)
at Socket.EventEmitter.emit (events.js:117:20)
at net.js:441:14
不足しているもの、および/または他に何を調査する必要がありますか? ありがとう!