1

そのため、Python コードを実行すると、サーバー (Google) は、curl コマンドを実行したときとは異なる応答を返します。誰かが私が間違っている場所を教えてもらえますか?

コード:

import urllib2, simplejson

def MapsWIFI(card):
    req = urllib2.Request("https://www.googleapis.com/geolocation/v1/geolocate?key=AI...")
    jWifi = """
{
 "wifiAccessPoints": [
  {
   "macAddress": "64:D1:A3:0A:11:65",
   "channel": 6,
  },
  ... #some AP here
 ]
}
    """
    print jWifi
    req.add_header("Content-Type", "application/json")
    jWifiReport = urllib2.urlopen(req,simplejson.dumps(jWifi)).read()
    print jWifiReport
    APdetected = str(len(wifiCell))
    mapsDict = simplejson.loads(jWifiReport)
    location = str(mapsDict.get("location",{}))[1:-1]
    accuracy = "Accuracy: "+str(mapsDict.get("accuracy",{}))[1:-1]
    mapMe = "|---"+location.split(",")[0]+"\n|---"+location.split(",")[1][1:]+"\n|---$
    return mapMe

MapsWIFI("wlp8s0")

コマンドは次のとおりです。

curl -d @file2.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=AI..."

file2.json には、その形式の jWifi が正確に含まれています。問題は、前述のように、コードによって返される場所が curl によって返される場所と異なることです。エラーコードが表示されないので、構文は正しいと思います。

4

1 に答える 1

1

データはすでにJSON でエンコードされた文字列であるため、2 回エンコードする必要はありません。

再度エンコードせずに渡します。

jWifiReport = urllib2.urlopen(req, jWifi).read()

Python データ構造 (この場合は辞書) がある場合にのみ、エンコードする必要があります。

于 2016-07-30T13:33:16.360 に答える