padisah Creative Commons License 2013.01.01 0 0 5723

hátha valakinek pont ez kell:

 

http://hc.apache.org/httpclient-3.x/

httpclient-el szívtam tegnap/tegnapelőtt elég sokat, egy weboldalt szerettem volna HTTP POST request-el megpörgetni, hogy a nekem kellő keresési eredményeket tartalmazó html-t kapjam vissza (ami helyett rendre a kérdést tartalmazó formot kaptam vissza)

 

 

linuxon egy justniffer nevű programot használva sikerült elfognom hogy mégis mit küld ki a chrome:

 

------WebKitFormBoundarykVBIq0AoQKgnGL1F

Content-Disposition: form-data; name="htmlbScrollX"
0

 

az én java programom ehez még hozzárakta kb így (fejből írom lehet hogy nem pontos):

------WebKitFormBoundarykVBIq0AoQKgnGL1F

Content-Disposition: form-data; name="htmlbScrollX"; Content-Type:"text/plain";

Transfer-Encoding:"US-ASCII"
0

 

gyanús lett hogy ez a nem jó, miután az összes paramétert ami a html formon szerepelt imitálom jávából is

végül is azon bukott el a dolog, hogy a httpclient default content type-ja plain/text, a transfer encoding-ja meg US-ASCII 

 

http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/methods/multipart/StringPart.html

a default-ok az osztály elején vannak felsorolva, és a megadása nélkül ezeket használja

 

lejjebb olvasva kiderült, hogy: setCharset() illetve a másik két értékre is létezik setXX függvény, és ezek fogadnak null-t, amikor nem ír a request part-ba Content-Type-ot, és Transfer encoding-ot sem

 

a setCharset() viszont nem a multipart requestbe ír paramétert, hanem magához a kódoláshoz használja fel, így az nem lehet null, ha null marad akkor NullPointerException-el elszáll a request meghívása (még a kliens oldalon)

 

és ezzel végül is működik