1

Intersango APIの正しいURL形式を理解しようとしています(これは十分に文書化されていません)。私はクライアントをC#でプログラミングしていますが、Pythonの例を見ていて、リクエストの本文に実際に何が配置されているかについて少し混乱しています。

def make_request(self,call_name,params):
    params.append(('api_key',self.api_key)) // <-- How does this get serialized?
    body = urllib.urlencode(params) 

    self.connect()

    try:
        self.connection.putrequest('POST','/api/authenticated/v'+self.version+'/'+call_name+'.php')
        self.connection.putheader('Connection','Keep-Alive')
        self.connection.putheader('Keep-Alive','30')
        self.connection.putheader('Content-type','application/x-www-form-urlencoded')
        self.connection.putheader('Content-length',len(body))
        self.connection.endheaders()

        self.connection.send(body)

        response = self.connection.getresponse()

        return json.load(response)
//...

このコードがわかりません。params.append(('api_key',self.api_key))

それはある種の辞書、JSONにシリアル化されるもの、コンマ区切り、または正確にどのようにシリアル化されるのですか?パラメータがエンコードされて割り当てられた場合、ボディはどのようになりますか?

PSコードを実行できるものがないので、デバッグできますが、Pythonを知っている人が理解できるほど簡単で、そこで何が起こっているのかを教えてくれることを願っています。コードの行。

4

3 に答える 3

1

params2要素リストのリストです。リストは次のようになります((key1, value1), (key2, value2), ...)

params.append(('api_key',self.api_key))別の2要素リストを既存のパラメータリストに追加します。

最後に、urllib.urlencodeこのリストを取得して、適切なurlencoded文字列に変換します。この場合、文字列を返しますkey1=value1&key2=value2&api_key=23423。キーまたは値に特殊文字が含まれている場合、urlencodeはそれらを%エンコードします。urlencodeのドキュメントを参照してください

于 2012-04-24T04:11:09.733 に答える
1

C#コードを機能させようとしましたが、例外{"リモートサーバーがエラーを返しました:(417)ExpectationFailed。"}で失敗し続けました。私はついに問題が何であるかを見つけました。あなたはここでそれについて深く読むことができます

つまり、C#でIntersango APIにアクセスする方法は、次のコードを追加することです。

System.Net.ServicePointManager.Expect100Continue = false;

このコードは1回だけ実行する必要があります。これはグローバル設定であるため、アプリケーション全体に影響します。その結果、他の何かが破損する可能性があることに注意してください。

サンプルコードは次のとおりです。

System.Net.ServicePointManager.Expect100Continue = false;
var address = "https://intersango.com/api/authenticated/v0.1/listAccounts.php";
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
var postBytes = Encoding.UTF8.GetBytes("api_key=aa75***************fd65785");
request.ContentLength = postBytes.Length;
var dataStream = request.GetRequestStream();
dataStream.Write(postBytes, 0, postBytes.Length);
dataStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
于 2012-06-20T04:40:43.997 に答える
1

params.append(('api_key',self.api_key)) ただ書くのではなく、ケーキの一部:

params['api_key']=self.api_key
于 2012-08-05T19:59:10.400 に答える