[Java] HTTPClient - httpPost - 301 - JSON - Ajax

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Smokers, 5. November 2011 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 5. November 2011
    HTTPClient - httpPost - 301 - JSON - Ajax

    Hallöchen,

    also ich hab das folgende Szenario.
    Ich beobachte eine Webseite mit Firebug und hab halt rausgefunden das dort über ein Ajax Script Daten per Post an eine Ajax URL gesendet werden :

    saddads.de/ajaxURL
    Code:
    hashed_val6475da59d645fa61423dc2a64d567900578def60f0154f109138bb56acd2bdafdb51328b646c48ac430325769623c45ffc8d440cfcfe3a4b81d61dfaeb6ce8e5dda6eae6195f589bc89857eb36ddc79e7e544a9a888f40a76032f028768ee39fc3c5abd72c54d223e597acd1db689865invisible2f2a7a20ba6a0a6e553025fd99f6fc5fmessageId25403567
    Daraufhin bekommt das Script zurück ne Menge Daten zurück, denke mal als String, oder vielleicht ist das auch JSON krams , kenn mich da nicht sooo aus.

    Daten sehen ungefähr so aus:
    Code:
    {"type":"data","application":[],"module":{"data":{"html":"<br class=\"clearFix\"\/>\n<div id=\"message_content_id_2313231\" class=\"javascript-hidden\">\n <div class=\"body_text\">\n content content content content<\/div>\n \n \n<\/div>\n\n<div id=\"antwort_2\" class=\"javascript-hidden\">\n <div id=\"antworten_Formular\">\n <form action=\"\" method=\"post\">\n <fieldset class=\"nachriten_antwort\">\n <input type=\"hidden\" name=\"reID\" id=\"reID\" value=\"2343242432432424432\" \/>\n <input type=\"hidden\" name=\"status\" id=\"state\" value=\"beantwortet\" \/>\n\n .......................... usw usw usw "},"config":{"hashed_val":"ea49f731ac2803c98611e8fa","invisible":"4faf01cd"}}}
    
    sowas halt.

    wie gesagt per browser läuft es so.

    wenn ich das ganze per Java emuliere mache ich das über folgendes kleines Script



    Code:
    rivate String postContentToPage(String url,List <NameValuePair> nvps){
     HttpPost httpost = new HttpPost(url);
     HttpResponse response;
     String sourcecode="";
     try {
     httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
     response = httpclient.execute(httpost);
     sourcecode = EntityUtils.toString(response.getEntity());
     EntityUtils.consume(response.getEntity());
     } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     }
     return sourcecode;
     }
    
    private Message getMessage(Integer id,Timestamp ts) {
     List <NameValuePair> nvps = new ArrayList <NameValuePair>();
     nvps.add(new BasicNameValuePair("hashed_val", currHV ));
     nvps.add(new BasicNameValuePair("invisible", currIV));
     nvps.add(new BasicNameValuePair("messageId", id.toString()));
     String res = postContentToPage("http://"+cfg.getMUrl()+".net/AjaxURL", nvps);
     System.out.println(res);
     
     //301 ?!
     return new Message("", "", id, "", "", ts);
    
     }
    
    

    Ich bekomme aber anders als im Browser einen 301 also ein permanently moved.
    Dann habe ich es versucht, weil wahrscheinlich nur das www. vor der URL fehlte, das einzubauen, dort bekomme ich aber eine leere Antwort, also keinen text oÄ.

    Woran könnte es liegen?!
    Muss ich vielleicht noch etwas spezielles emulieren, damit das Script nicht merkt das kein Browser das POST krams sendet?


    Der Live-Header sieht so aus, wenn ich den Aufruf ausm Browser starte :

    Code:
    http://www.mainurl.net/AjaxURL
    
    POST /AjaxURL HTTP/1.1
    Host: www.mainurl.net
    User-Agent: Mozilla/5.0 (Windows NT 5.1; WOW64; rv:6.0.1) Gecko/20100101 Firefox/6.0.1
    Accept: application/json, text/javascript, */*
    Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    DNT: 1
    Connection: keep-alive
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    X-Requested-With: XMLHttpRequest
    Referer: http://www.mainurl.net/usercp/posteingang
    Content-Length: 287
    Cookie: s_ps=%20s_vsn_urlc_1%3D8374901304964%7C1634219193173%3B%20s_nr%3D1320503278266-Repeat%7C1323095278266%3B; Storage=%7B%22Suche%22%3A%22%22%7D; s_vsn_curl-mft-r_1=7286054666373; s_vsn_curl-global-r_1=8302297144477; requesttoken=KV51GLl0DffObisQgvJ0iNbteezR09ycy5zo0g4NIno; requesttoken=-bW7y2iiCpZv5Fp0hjihhnZ_mKzUAiicP-5ntO-KTwA; PHPSESSID=ea86a29c1fb2334dc73ff9c03ffd5684169; s_session=%20s_eft%3Deft29%3B%20s_ads%3Deml_MN_curl_f_act%3B%20ev7%3%7D
    Pragma: no-cache
    Cache-Control: no-cache
    hashed_val=ea49f731f7780bf0d23643a3917e0b361cfa6751182dac2803c98611e8fa&invisible=4faf9057b99c01cd&messageId=25401565
    HTTP/1.1 200 OK
    Date: Sat, 05 Nov 2011 14:28:27 GMT
    Content-Type: text/json; charset=UTF-8
    Connection: keep-alive
    Server: Apache
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Content-Encoding: gzip
    Vary: Accept-Encoding
    X-Frontend: lnxp-3810
    Content-Length: 1163
    ----------------------------------------------------------
    
     
  2. 5. November 2011
    AW: HTTPClient - httpPost - 301 - JSON - Ajax

    Der Mitschnitt aus dem Browser zeigt ja, dass noch eine ganze Menge Header gesetzt sind. Du solltest einfach ausprobieren den Referer zu setzen oder eventuell brauchst du auch nur nen gültigen Session-Cookie. Da musst du einfach ein bisschen probieren, denn was das Skript alles prüft kann man schließlich nicht genau sagen.
     
  3. 5. November 2011
    AW: HTTPClient - httpPost - 301 - JSON - Ajax

    mhh kay,.. also Cookie sollte glaube ich nicht das ding sein, denn der httpclient führt die cockies glaube ich weiter.

    Arbeite nur zum ersten mal mit der lib und muss erstmal schauen wo ich den header noch manuell beeinflussen kann etc
     
  4. 5. November 2011
    AW: HTTPClient - httpPost - 301 - JSON - Ajax

    Du kannst auf dem HttpPost-Objekt einfach setHeader(string header, string value) aufrufen.

    // Nochmal zu dem Cookie: Der HttpClient behält die Cookies zwar, aber du musst ja vorher mit dem selben Objekt dann schon einmal eine Seite aufgerufen haben, um einen Cookie zu erhalten.
     
  5. 5. November 2011
    AW: HTTPClient - httpPost - 301 - JSON - Ajax

    es war wirklich so eifnach, man musste nur den header noch um 3 zeilen erweitern :

    Code:
    httpost.setHeader("Accept","application/json, text/javascript, */*");
     httpost.setHeader("X-Requested-With","XMLHttpRequest");
     httpost.setHeader("Referer","http://www."+cfg.getMUrl()+".net/usercp/Posteingang");
    schon kam der output,.. genital =)


    der Cookie store funktionierte super, ich hab mich ja zuvor schon an der webseite angemeldet per ssl, und schon einige andere dinge geparst, zB wieviele seiten es an nachrichten gibt.


    wie gesagt es schien wirklich am referer und an dem X-Requested-With gelegen zu haben.


    hätte gedacht es ist komplizierter.
    danke =)
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.