2017-01-20 14 views
0

現在、ノードを使用してCURLリクエストを作成しようとしています。PHP CURLをNPM CURLに変換する

私はPHPで以下のCURLの要求を持っている: -

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://www.website.com'); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); 
curl_setopt($ch, CURLOPT_POSTFIELDS, ''); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: token XXX', 
    'Content-Type: application/json' 
)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$output = curl_exec($ch); 

curl_close($ch); 

私はノードで同じCURLの要求を実行する必要があります。 私は多くの異なるNPMパッケージを試して、curljsに解決しました。

私は、次のコードを持っている: - 私はエラーなしでサーバーからの応答を取得することができていますが、それはすべてのデータを返していない

var curl = require("curljs"); 

var curlOpts = curl.opts.connect_timeout(10); 

curl("https://www.website.com -H Authorization: token XXX -H Content-Type: application/json --get", curlOpts, function(err, data, stderr) { 
    console.log(err); 
    console.log(data); 
    console.log(stderr); 
}); 

を。 は、私は、次の応答を取得: -

null 

    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
    0  0 0  0 0  0  0  0 --:--:-- --:--:-- --:--:--  0 

誰もが正しい方向にプッシュして助けることができるだろうか?

ご協力いただければ幸いです。別のノートで

: - 私もここでrequest

を使用しようとしました

は私のコードです: -

var request = require('request'); 

var options = { 
    url: 'https://www.website.com', 
    headers: { 
    'Authorization': 'token XXX', 
    'Content-Type': 'application/json' 
    } 
}; 

function callback(error, response, body) { 
    if (!error && response.statusCode == 200) { 
    var info = JSON.parse(body); 
    console.log(info); 
    } else { 
    console.log(body); 
    } 
} 

request.get(options, callback); 

しかし、それはエラーを返す続けます。またnode-fetchを使用して

は同じエラーを返します: -

fetch("https://www.website.com", { 
    method: "GET", 
    headers: { 
    Authorization: "token XXX", 
    "Content-Type": "application/json" 
    } 
}).then(function(response) { 
    return response; 
}).then(function(response) { 
    console.log(response); 
}); 

PHPのバージョンは完璧に動作し、私は正しくヘッダを設定していないのですか?

+0

PHPからNodeに移動しました。 Nodeについての最も良いことの1つは、HTTP要求を行う能力です。 CURLを使用する必要がありますか?私はあなたの仕事がRequestJSのような図書館でうまくいくと思っています。もう一度curl_setoptを実行することは決してありません:) –

+0

APIリクエストからJSONを返そうとしています。 RequestJSを使用してサンプルを提供できますか? 私はcurljsを使用するように設定されていませんが、私が見つけることができるパッケージの中で最高のようです。 –

+1

JSONを取得する方法はたくさんあります。私のお気に入りはフェッチです。ブラウザのように使いましょう。 npmはnode-fetchをインストールします。それから 'fetch( 'http://www.website.com').then(res => res.json())。then(res => //何かをする)'。承認ヘッダーが必要な場合は、それも実行できます。 RequestJSもそれを行うことができます。あなたの好みにちょうど依存します。私は両方を使用しました。 –

答えて

0

HTTPリクエストはNode.jsに保存されます。 httphttpsのモジュールはいくつかのコアモジュールです。あなたは何もせずにインストールされます。

しかし、それらは使用するのが完全に簡単ではありません。それらは複雑ではありませんそれ自体はですが、よりシンプルになる可能性があります。

私の心の中で一番良い実装はfetch APIです。これは最新のWebブラウザ(see MDN)に含まれています。またnode-fetch moduleをインストールすることにより、ノードでそれを使用することができます。

npm install node-fetch --save 

その後、fetch機能を使って電話をかけることができます。あなたは、Promiseを使って素敵で現代的なES6-ishのような形で結果を得ます。あなたのケースでは

:あなたは現代の矢印の機能を使用して喜んでいる場合

fetch("http://www.website.com", { 
    method: "GET", // not strictly necessary 
    headers: { 
    Authorization: "token XXX", 
    "Content-Type": "application/json" // is this accurate?! 
    } 
}).then(function(response) { 
    return response.json(); // we want JSON output 
}).then(function(response) { 
    console.log(response); // logs the server response 
}); 

あなたはこれをしてもきれいにすることができます。

+0

これはまだ404を返しています。 APIからのコンテンツですが、私がノードで何を試しても、私は404を取得し続けます。 –

+0

@TonyHensler素敵な 'User-Agent'セットのようないくつかのAPIは:あなたはそれを試すことができます。しかし、それが何であるかわからないときは、リソースに対する非常に難しいコーディングです! – lonesomeday

+0

私はそこにUser-Agentを置こうとしましたが、それでも同じ結果を返します。 PHPで完全に動作するのは非常に不満ですが、ノードを使用して応答を得ることはできません。 –

-1

は、私はあなたが単にrequestを使用することができると思う

を更新しました。あなたのシナリオで

例:

var request = require('request'); 

var options = { 
    url: 'https://www.website.com', 
    headers: { 
     "Authorization": "token XXX", 
     "Content-Type": "application/json" 
    } 
}; 

function callback(error, response, body) { 
    if (!error && response.statusCode == 200) { 
     console.log(response); 
     console.log(body); 
    } 
} 

request(options, callback); 

モジュールの使い方は簡単で、直感的なソリューションと例があります。 Nodeプロジェクト全体でこれをしばらく使っていますが、これまでに問題は発生していません。

希望すると、これが役立ちます。

+0

これは[削除されるリンク専用の回答](https://stackoverflow.com/help/deleted-answers)ではないようですが、ツールやライブラリへのリンクにはリンクされたリンクリソースは問題に適用され、理想的には[使用上の注意やサンプルコードも添付してください](https://meta.stackoverflow.com/a/251605)。 "非常に使いやすい"というのは極端に*最小限の推奨です。 –

関連する問題