2014-12-17 3 views
5

Я пытаюсь сделать POST-вызов от клиента javascript к API-интерфейсу с четырьмя запросами, называемому addvenue. Это конечная точка API documentation link.
Но сервер возвращает 405 - метод не разрешен. Вот фрагмент, сделанный по телефону

var postdata = {'oauth_token':$scope.access_token_foursquare, 
         'v':'20141217','name':'randomlisting', 
         'll':'44.3,37.2','m':'foursquare'}; 
var req = { 
      method: 'POST', 
      url: 'https://api.foursquare.com/v2/venues/add', 
      headers: { 
       'content-type': 'application/x-www-form-urlencoded' 
      }, 
      data: postdata 
      } 

$http(req).then(function(response){ 
     console.log(response); 
      }); 

Ниже представлен запрос и ответный пакет для вышеуказанного вызова.

Remote Address:103.245.222.185:443 
Request URL:https://api.foursquare.com/v2/venues/add 
Request Method:OPTIONS 
Status Code:405 Method Not Allowed 

**Request Headers** 
Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8 
Access-Control-Request-Headers:accept, authorization, content-type 
Access-Control-Request-Method:POST 
Connection:keep-alive 
Host:api.foursquare.com 
Origin:http://localhost:9000 
Referer:http://localhost:9000/foursquare 
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 

**Response Headers** 

Accept-Ranges:bytes 
Access-Control-Allow-Origin:* 
Connection:Keep-Alive 
Content-Length:90 
Content-Type:application/json; charset=utf-8 
Date:Wed, 17 Dec 2014 12:15:15 GMT 
Keep-Alive:timeout=10, max=50 
Server:nginx 
Tracer-Time:1 
Via:1.1 varnish 
X-Cache:MISS 
X-Cache-Hits:0 
X-Served-By:cache-sn87-SIN 

Я также изучал проблему CORS. В моем случае сервер разрешает все происхождение, как видно из заголовков ответов. Я поражен этой проблемой и не могу продолжить.

Любая помощь будет оценена по достоинству. Спасибо заранее.

+0

Такого рода вопрос возникает каждый день, может быть, это будет полезно: http://stackoverflow.com/questions/19554414/angularjs-disabling-cors – Rasalom

+0

Спасибо за немедленный ответ. Я попробовал следующее, как указано в приведенной ссылке. 'angular.module ('yourModuleHere') .config (функция ($ httpProvider) { delete $ httpProvider.defaults.headers.common ['X-Requested-With']; });' Все-таки эта же проблема сохраняется. – bala

+0

Вы нашли решение, поделитесь – MohQut

ответ

1

Метод запроса: ВАРИАНТЫ

Клиент делает предварительный полет OPTIONS запроса на сервер.

Запрос OPTIONS автоматически создается браузером перед выполнением запроса непрозрачного (например, не GET) кросс-домена (CORS).

Назначение запроса OPTIONS - это быстрая проверка с сервером, чтобы гарантировать, что клиенту разрешено делать POST до фактического создания POST. Таким образом, клиент делает 1 или 2 запроса.

Запрос OPTIONS и если запрос OPTIONS успешно отвечает (а не 405), затем выполните POST.

Запрос OPTIONS скорее всего не срабатывает, потому что вы не указали в своем ответе сервера, что ваш сервер поддерживает запросы OPTIONS.

Добавить этот заголовок вашего ответа сервера ..

Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS 

Тогда все должно работать.

Смотрите https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests для получения дополнительной информации

Смежные вопросы