2016-05-05 5 views
0

replizieren Ich versuche, eine POST-Anfrage von CasperJS zu tun:Kann nicht POST-Anfrage in 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); 
    } 
}); 

Als ich die Anfrage woanders ausführen ich die entsprechende Antwort erhalten, aber aus irgendeinem Grund kann ich nicht replizieren Sie die Ausgabe auf CasperJS. Hier ist ein Beispiel für eine cURL-Anforderung, die Arbeit hat:

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

Welche Art von Daten der Server erwartet? Müssen Sie den Header "Content-Type" festlegen? – matmo

+0

Ich habe hinzugefügt, aber es funktioniert immer noch nicht. Ich fügte auch eine cURL hinzu, die zum Vergleich funktioniert. – wizplum

Antwort

0

Mein Fall war CasperJS (1.1.x-Version) Testen meines REST-API. API ist in Knoten geschrieben. In einer bestimmten Ressource bearbeite ich ein Formular mit formiddable. Wenn ich content-type: multipart/form-data in Casper einstelle, klagt diese formiddable-Bibliothek mit diesem Fehler: bad content-type header, no multipart boundary

Ich konnte keine Lösung dafür finden. Stattdessen landete ich in Casper tun dies bis:

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' 
     } 
    }) 

grundsätzlich formatiert ich den Körper in das richtige Format und das funktionierte