Заявка за геолокация от Amazon EC2

Внедрявам приложение, което прави заявка срещу API за геолокация на Google Maps. Заявките ми преминават добре от моята работна станция. Но получавам грешка 400 Bad Request всеки път, когато го стартирам от сървър в облака на Amazons.

По-долу е примерна заявка за curl, която правя, за да тествам. Използваният API позволява всяко IP.

curl -d "{'wifiAccessPoints':[{'macAddress':'c8:d7:19:16:3b:63'},{'macAddress':'c8:d7:19:16:3b:61'}]}" -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=PUTYOURKEYHERE" -v

По-долу е даден пример за резултатите от грешката

* About to connect() to www.googleapis.com port 443 (#0)
*   Trying 173.194.76.95... connected
* Connected to www.googleapis.com (173.194.76.95) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSL connection using SSL_RSA_WITH_RC4_128_SHA
* Server certificate:
*   subject: CN=*.googleapis.com,O=Google Inc,L=Mountain View,ST=California,C=US
*   start date: Jan 15 14:37:40 2014 GMT
*   expire date: May 15 00:00:00 2014 GMT
*   common name: *.googleapis.com
*   issuer: CN=Google Internet Authority G2,O=Google Inc,C=US
> POST /geolocation/v1/geolocate?key=AIzaSyDzcv8DIbbeGBaONSq2kXh7g9AZbgsiUC8 HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.3.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: www.googleapis.com
> Accept: */*
> Content-Type: application/json
> Content-Length: 93
> 
< HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
< Content-Type: application/json; charset=UTF-8
Content-Type: application/json; charset=UTF-8
< Date: Thu, 30 Jan 2014 10:56:18 GMT
Date: Thu, 30 Jan 2014 10:56:18 GMT
< Expires: Thu, 30 Jan 2014 10:56:18 GMT
Expires: Thu, 30 Jan 2014 10:56:18 GMT
< Cache-Control: private, max-age=0
Cache-Control: private, max-age=0
< X-Content-Type-Options: nosniff
X-Content-Type-Options: nosniff
< X-Frame-Options: SAMEORIGIN
X-Frame-Options: SAMEORIGIN
< X-XSS-Protection: 1; mode=block
X-XSS-Protection: 1; mode=block
< Server: GSE
Server: GSE
< Alternate-Protocol: 443:quic
Alternate-Protocol: 443:quic
< Transfer-Encoding: chunked
Transfer-Encoding: chunked

< 
{
 "error": {
  "errors": [
   {
    "domain": "geolocation",
    "reason": "invalidRequest",
    "message": "Bad Request"
   }
  ],
  "code": 400,
  "message": "Bad Request"
 }
}
* Connection #0 to host www.googleapis.com left intact
* Closing connection #0

person user3246295    schedule 28.01.2014    source източник
comment
Възможен дубликат на услугата за геокодиране на Google връща грешка 400 лоша заявка. Но вероятно ще трябва да използвате клиентския геокодер. Ключовете не са разрешени в API за геокодиране. Споделените сървъри споделят квота за заявки за геокодер от сървъра (освен ако нямате клиентски идентификатор на Maps for Business).   -  person geocodezip    schedule 29.01.2014
comment
Използвам API за геолокация, а не API за геокодиране. Горната заявка работи навсякъде, където я тествам, освен от Amazon.   -  person user3246295    schedule 29.01.2014
comment
Можете ли да включите превключвателя curl -v и да споделите изхода curl от вашия екземпляр на EC2?   -  person Steve Jansen    schedule 29.01.2014
comment
Добавени са подробните резултати, както е поискано   -  person user3246295    schedule 30.01.2014
comment
@steve Когато стартирам curl с превключвателя verbose, виждам една важна разлика, * upload completely sent off: 93 out of 93 bytes   -  person user3246295    schedule 30.01.2014
comment
@user3246295 Имам същия проблем . Решихте ли го? Благодаря   -  person chaithu    schedule 03.05.2015


Отговори (1)


Имах абсолютно същия проблем, по някаква причина същата команда curl щеше да работи на ubuntu, но не и на amazon ami (centos). Решението беше да се добави considerIp: false към тялото на заявката, като това:

{
    "considerIp": false,
    "wifiAccessPoints": [
        ...
    ]
}
person brunodea    schedule 24.11.2015