2015-01-10 3 views
0

Scrapyd 서버를 실행 중이고 작업을 예약하려고합니다. 요청은 CURL에서 작동하지만 Ajax에서는 작동하지 않습니다.

내가 CURL을 사용하여 아래에 시도

그것은

는 내가 AJAX 요청을 수행 한 것을 내가 이것에 대한 GUI를 가지고 각도의 작은 코드 UI를 수행 한 후, 핀 전자

curl http://XXXXX:6800/schedule.json -d project=stackoverflow -d spider=careers.stackoverflow.com -d setting=DOWNLOAD_DELAY=2 -d arg1=val1 

을하고있다 위의 작업을 수행하십시오.

var baseurl = GENERAL_CONFIG.WebApi_Base_URL[$scope.server]; 
      var URI = baseurl +"schedule.json"; //http://XXXXX:6800/schedule.json 
      var headers = {'content-type': 'application/x-www-form-urlencoded'} 

      console.log(URI) 

      $http.post(URI,data = $scope.Filters, headers).success(function (data, status) { 


       console.log(data) 


      }).error(function (data, status) { 
       console.log(status); 

       alert("AJAX failed!"); 
      }); 

그러나 나는 No 'Access-Control-Allow-Origin' header is present on the requested resource. 오류가 발생합니다.

해결 방법을 알려줄 수 있습니까?

왜 CURL에서 작동하지만 내 AJAX에서는 작동하지 않습니다.

감사합니다.

답변

0

이는 브라우저가 동일한 출처 정책이라는 이유 때문입니다. 다른 체계, 호스트 이름 및 포트 번호 조합을 통해 아약스 요청을 방지합니다. 컬에는 그러한 보호 장치가 없습니다.

동일한 도메인과 포트에 api와 client 앱을 둘 다 넣거나 CORS 헤더 'Access-Control-Allow-Origin'을 서버에 추가해야합니다.

다른 옵션 중 하나는 JSONP입니다. 이 경우 json 데이터를 가져 오는 데 적합 할 수 있습니다. 휴식 API에는 적합하지 않습니다. 각도 사용시이

+0

나는 스크랩 (Twisted 서버)에 대한 통제권이 없다. 클라이언트 레벨에서 내가 할 수있는 일이 무엇이 있는가? – Backtrack

+0

[JSONP] (http://en.wikipedia.org)를 사용할 수있다./wiki/JSONP) 실제로는 get 요청 만 허용하기 때문에 적합하지 않을 수 있습니다. 휴식 API에는 좋지 않습니다. 어쨌든 .json 확장 프로그램에 게시하는 이유는 무엇입니까? JSONP가 작동하도록 –

+0

https://scrapyd.readthedocs.org/en/latest/api.html#schedule-json을 대신 수행 할 수 있다고 생각합니다. 내 요청 URL에 .json이 있으므로 Scrapyd를 사용하고 있습니다. – Backtrack