2016-08-16 2 views
1

Я новичок в phantomjs, и я написал фрагмент кода, который позволяет мне делать запрос с заголовком и телом. Однако, когда я делаю почтовый запрос, данные не отправляются. В чем проблема?phantomjs post request with formurlencoded

var webPage = require('webpage'); 
var page = webPage.create(); 
console.log('1'); 
var settings = { 
    operation: "POST", 
    encoding: "utf8", 
    headers: { 
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36", 
     "Cookie":"ASP.NET_SessionId=ajq11hy45hmdmr51ra3ivtee; otohitsforgery=G6ZHZo_p9dC1oczq_GB8_9I76pgnmBoVbCpkKnG8oAJJLaEXhTlAJmsCT6Ttg5J_I4ajeODlp1OgksJ7xn1ZDTXLk85cr2vOxJ3kl5YsuCgmprP3WRNzm_f5wOJqgQNXLXwwdeBaxWqYeGi6PeQgbg2", 
     "Content-Type":"application/x-www-form-urlencoded" 
    }, 
    data: { 
    "__RequestVerificationToken":"Ujol0sctq8I5bko4eLieDLP6ZiX1wShq3zP77JLpj8rAJy0MJIaI9JAt-ZfYmmqQkiL9QVUw7la6lqlwByqcUifU264H35Dq0pZUokl87jc5f1SpNA4G1_y5sF2eWB-MKWDC5WW33GdZnyRRXZP2ndGcBFB0hTwk5SPhGc3-z1I1", 
     "ReturnUrl":"", 
     "Email":"[email protected]", 
     "Password":"111111" 

    } 
}; 
page.open('url', settings, function(status) { 
    console.log('Status: ' + status); 
    var cookies = page.cookies; 

    console.log('Listing cookies:'); 
    for(var i in cookies) { 
    console.log(cookies[i].name + '=' + cookies[i].value); 
    } 
    var content = page.content; 
    console.log('Content: ' + content); 
    phantom.exit(); 
}); 

Вот скриншот, когда я отслеживаю запрос с помощью скрипача. Я получаю следующее. В моем заголовке все есть: Header

Однако в веб-форму, я ничего не получаю: Webform

И тогда я получаю внутренняя ошибка сервера на 500.

Что мне нужно изменить, чтобы сделать запрос на отправку, чтобы данные были включены в мой запрос?

Мне также нужны печеньки. Я не смогу войти в систему без файлов cookie. что я придумал фрагмент кода. Но по какой-то причине он работает неправильно.

var webPage = require('webpage'); 
var page = webPage.create(); 
console.log('1'); 

page.open("http://someurl.com",function(status){ 
var cookies = page.cookies; 
console.log('Listing cookies:'); 
for(var i in cookies) { 
    console.log(cookies[i].name + '=' + cookies[i].value); 
    } 
cookies = cookies[1].name + '=' + cookies[1].value + '; ' + cookies[0].name + '=' + cookies[0].value; 
console.log(cookies); 
var settings = { 
    operation: "POST", 
    encoding: "utf8", 
    headers: { 
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36", 
    "Cookie":cookies, 
    "Content-Type":"application/x-www-form-urlencoded" 
    }, 
    data: { 
    "__RequestVerificationToken":"Ujol0sctq8I5bko4eLieDLP6ZiX1wShq3zP77JLpj8rAJy0MJIaI9JAt-ZfYmmqQkiL9QVUw7la6lqlwByqcUifU264H35Dq0pZUokl87jc5f1SpNA4G1_y5sF2eWB-MKWDC5WW33GdZnyRRXZP2ndGcBFB0hTwk5SPhGc3-z1I1", 
    "ReturnUrl":"", 
    "Email":"[email protected]", 
    "Password":"111111" 

    } 
var postBody = ""; 

Object.keys(data).forEach(function (key) { 
    postBody += (key + "=" + data[key] + "&"); 
}); 

console.log(postBody); 
}; 
page.open('http://www.someurl.com', 'POST', settings, function(status) { 
    console.log('Status: ' + status); 
    phantom.exit(); 
}); 

Как это сделать?

}); 
+0

Является '500 внутреннего error' сервера происходит, когда вы делаете запрос POST? – Vaviloff

+0

Да, это происходит только тогда, когда я делаю этот запрос ... вероятно, потому, что этот файл cookie неверен, но моя главная проблема заключается в том, как я могу передать контент как formurlencoded – Puzzle

+0

any ????????? – Puzzle

ответ

0

Я пробовал ваш образец кода, и он действительно не будет работать (PhantomJS 2.1.1).

Однако откатиться к the old way ли отправить данные:

var data = { 
    "__RequestVerificationToken":"Ujol0sctq8I5bko4eLieDLP6ZiX1wShq3zP77JLpj8rAJy0MJIaI9JAt-ZfYmmqQkiL9QVUw7la6lqlwByqcUifU264H35Dq0pZUokl87jc5f1SpNA4G1_y5sF2eWB-MKWDC5WW33GdZnyRRXZP2ndGcBFB0hTwk5SPhGc3-z1I1", 
    "ReturnUrl":"", 
    "Email":"[email protected]", 
    "Password":"111111" 
} 

var postBody = ""; 

Object.keys(data).forEach(function (key) { 
    postBody += (key + "=" + data[key] + "&"); 
}); 

console.log(postBody); 

page.open('http://example.com/', 'POST', postBody, function(status) { 
    console.log('Status: ' + status); 
    phantom.exit(); 
}); 

Сервер получает данные:

array(4) { 
    ["__RequestVerificationToken"]=> 
    string(172) "Ujol0sctq8I5bko4eLieDLP6ZiX1wShq3zP77JLpj8rAJy0MJIaI9JAt-ZfYmmqQkiL9QVUw7la6lqlwByqcUifU264H35Dq0pZUokl87jc5f1SpNA4G1_y5sF2eWB-MKWDC5WW33GdZnyRRXZP2ndGcBFB0hTwk5SPhGc3-z1I1" 
    ["ReturnUrl"]=> 
    string(0) "" 
    ["Email"]=> 
    string(16) "[email protected]" 
    ["Password"]=> 
    string(6) "111111" 
} 

Edit 1

Мне нужно печенье также. Я не смогу войти в систему без файлов cookie.

PhantomJS способен обрабатывать куки автоматически, если вы запустите его с командой переключения --cookies-файл:

/usr/bin/phantomjs --cookies-file=/home/usr/cookies.txt /home/usr/script.js 
+0

Мне также нужны печеньки. Я не смогу войти в систему без файлов cookie. вот что я придумал. Но по какой-то причине он работает неправильно. – Puzzle

+0

Я отредактировал мой вопрос, не могли бы вы взглянуть на него? – Puzzle

+0

Вы получаете куки извне или вам просто нужно поддерживать файлы cookie в PhantomJS? – Vaviloff