2016-05-05 4 views
0

Я пытаюсь сделать запрос POST от CasperJS:Не удается повторить запрос POST в CasperJS

for(var i in phantom.cookies) 
    cookie += phantom.cookies[i].name + '=' + phantom.cookies[i].value + ';'; 

casper.thenOpen(url, { 
    method: 'post', 
    data: { 
     // some form-data 
    }, 
    headers: { 
     'Content-Type': 'multipart/form-data', 
     'Cookie': cookie 
    } 
}, function(response) { 
    if(response.status == 200) { 
     require('utils').dump(this.page.content); 
    } 
}); 

Когда я выполняю запрос где-то еще, я получаю соответствующий ответ, но по некоторым причинам я не могу повторите вывод на CasperJS. Ниже приведен пример запроса завиток, который сделал работу:

curl -X POST -H "Cookie: cookie" -H "Content-Type: multipart/form-data" -F "field=field" "url" 
+0

Каких данных ожидает ваш сервер? Вам нужно установить заголовок «content-type»? – matmo

+0

Я добавил, но он все еще не работает. Я также добавил cURL, который работает для сравнения. – wizplum

ответ

0

Мой случай был CasperJS (1.1.x версия) тестирование мой REST API. API написан на узле. В одном конкретном ресурсе я обрабатываю форму с помощью formiblyable. Когда я устанавливал тип контента: multipart/form-data в Casper, эта библиотека с возможностью чтения жалуется на эту ошибку: плохой заголовок типа содержимого, без многострочной границы

Я не мог найти решение для этого. Вместо этого я в конечном итоге делает это в Каспер:

casper.open(<url>, { 
     method: 'POST', 
     data: "\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"title\"\r\n\r\nxxx\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"upload\"\r\n\r\nhttps:\/\/url\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", 
     headers: { 
      'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' 
     } 
    }) 

в основном я отформатировал тело в нужном формате и это работало

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