2017-09-19 14 views
1

クエリーコードでこの?where[id]=CXPのようなリクエストを行う必要がありますが、リクエストのparams(params = {'where[id]': 'CXP'})に定義すると、内部サーバーエラー500が返されます。ParamsがPythonクエリーストリングを要求します

r = requests.get('http://myurl', params=params) 

このリクエストをするには正しいwhayは何ですか?

ありがとうございました。

+0

「500」は、あなたのリクエストと同じように、内部エラーが発生していることを意味します。あなたのコードは問題ありません、サーバーコードにはエラーがあります。それがあなたのサーバーコードであれば、それを提供してください。また、あなたのサーバのコンソールを確認するか、エラーが – Felk

+0

ある何のためにログインする 、ありがとうしかし、私は、ブラウザの要求を行うとき、応答が細かいです: ブラウザの要求: ます。http:[ID]はCXP を= // myurl? RESPONSE: { "データ":{ "サービス":[ { "ID": "CXP"、 "優先":ヌル、 "タイトル":ヌル、 "URL":ヌル、 "visibility":false } ] }、 "メッセージ": "OK" 、 "statusCode":0、 "タイムスタンプ":1505826297 } –

+0

削除されたコメントについて:それについては気をつけないで、リクエストはそれ自身でURLエンコーディングを処理する必要があります – Felk

答えて

0

サーバーがjsonの書式設定を必要とする可能性は非常に高いです。 500はそのようには見えませんが、まだ試してみる価値があります。 要求のバージョン2.4.2以降では、単にjsonをパラメータとして使用できます。それはあなたのためのエンコーディングの世話をします。あなたがやらなければならないことは、次のとおりです。

r = requests.get('http://myurl', json=params) 

あなたが要求の古いバージョンを使用して(何らかの理由で)している場合、あなたは次のことを試すことができます。

import simplejson as json 
r = requests.get('http://myurl', param=json.loads(params)) 

私はいつものようにsimplejsonjson以上のパッケージをお勧めしますより頻繁に更新されます。

編集:urlencodingを防ぐには、唯一の解決策は文字列を渡すことです。

r = requests.get('http://myurl', param='where[id]=CXP') 
+0

問題は、サーバが%28と%29に" [""] "を置き換えていることです。 /dealer/api/service?ここで、%28id%29 = CXP –

+0

ああ、今すぐ取得します。私はいくつかの洞察を提供するために私の答えを更新しました。申し訳ありませんが、私はより有用ではありません。 – BluePat

+1

しかし、私は遅かった:D – BluePat

0

フレンド..私はそれを解決すると思う。

params要求に文字列を許可します。 だから、私はそれが最善の方法ではないと思うが、 - 私はとパッティング:

R = requests.get( 'http://myurl'、のparams = '[サービス]はCXPを=ここで、')

と正常に動作します!

関連する問題