HTTP Post Request via Java to apple.com

aroxx

Lieutenant
Registriert
März 2012
Beiträge
946
Hallo,

ich wuerde gerne eine automatische Suchanfrage an apple.com senden um den Servicestatus eines Geraets zu ueberpruefen
Bisher habe ich:

Code:
public void sendPostApple()throws Exception{

		String url = "https://selfsolve.apple.com/wcResults.do";
		URL obj = new URL(url);
		HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

		//add reuqest header
		con.setRequestMethod("POST");
		con.setRequestProperty("User-Agent", "Mozilla/5.0");
		con.setRequestProperty("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");
		con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

		String urlParameters = "sn=DNPKHDMCDTTP&cn=&locale=&caller=&num=466696";

		// Send post request
		con.setDoOutput(true);
		DataOutputStream wr = new DataOutputStream(con.getOutputStream());
		wr.writeBytes(urlParameters);
		wr.flush();
		wr.close();

		int responseCode = con.getResponseCode();
		System.out.println("Sending 'POST' request to URL : " + url);
		System.out.println("Post parameters : " + urlParameters);
		System.out.println("Response Code : " + responseCode);

		BufferedReader in = new BufferedReader(
				new InputStreamReader(con.getInputStream()));
		File f = new File("c:\\appletest.html");
		BufferedWriter bw = new BufferedWriter(new FileWriter(f));
		for (String line; (line = in.readLine()) != null;) {
			bw.write(line);			
			bw.newLine();
		}
		bw.close();

Das Problem ist, dass die dann auf meiner Festplatte gespeicherte Seite nicht die Seite ist, die kommt wenn ich regulaer nach der Seriennummer (=sn in den URL Parametern) suche.

In der regulaeren Seite finden sich folgende Zeilen zusaetzlich:

HTML:
warrantyPage = new WCPage();
warrantyPage.warrantycheck.initialize(562243);




    warrantyPage.warrantycheck.hidePanel(); 
    $('cookieSpinner').hide();
    
    
             warrantyPage.warrantycheck.hideRow('iphonenotactivated');
            
                 $('results').show(); 
                 warrantyPage.warrantycheck.showTitle('status');
                 
                 var regTextKeyLong = 'A validated purchase date lets Apple quickly find your product and provide the help you need.';
                 $('registration-text').update(regTextKeyLong);
                 warrantyPage.setClassAndShow('registration', 'green', 'registration-true');
                 
                 warrantyPage.warrantycheck.displayProductInfo('https://km.support.apple.com.edgekey.net/kb/securedImage.jsp?configcode=DTTP&size=72x72', 'iPhone 5', false,'DNPKHDMCDTTP', false, '', 'DNPKHDMCDTTP');
                 
                 warrantyPage.warrantycheck.displayPHSupportInfo( false, 'Telephone Technical Support: Expired', 'You are eligible to purchase telephone technical support from an Apple Advisor.', 'https://expresslane.apple.com/GetproductgroupList.do?serialno=DNPKHDMCDTTP&locale=en_US'); 
                 
                 warrantyPage.warrantycheck.displayHWSupportInfo(true, 'Repairs and Service Coverage: Active', 'Your product is covered for eligible hardware repairs and service under Apple's Limited Warranty.<br/>Estimated Expiration Date: April 11, 2014<br/><a href="http://support.apple.com/kb/he44">Learn about Apple's coverage information for your product.</a>', 'https://selfsolve.apple.com/GetWarranty.do?sn=DNPKHDMCDTTP&locale=en_US');
                 
                 warrantyPage.warrantycheck.displayEligibilityInfo('LI', false, '', 'DNPKHDMCDTTP', 'We're sorry, but this product is not eligible for an AppleCare agreement.', '/AgrOfferFlow.do','USA','APP','oesBxmqd7Pfs1TpmV2ejSg==', false);
                 
                 warrantyPage.warrantycheck.displayDisputeInfo('<div class="sosumi">If you believe the information shown for your product is incorrect, you can <a href="https://selfsolve.apple.com/Dispute.do?transType=Warranty_Checker&sn=DNPKHDMCDTTP" id="hardware-epop" target="_blank">submit your proof of purchase online</a> or by fax. Your sales receipt is needed for Apple's 1-year limited warranty and AppleCare Protection Plan validation, so be sure to keep it in a safe place.  Apple's 1-year limited warranty is the same whether or not you register. <br /><br /><FONT COLOR="black"><b>Important:</b> Apple's 1-year limited warranty and AppleCare Protection Plan benefits are in addition to rights provided by consumer law. For details, <a href="http://www.apple.com/legal/warranty/Additional_Legal_Rights_for_Consumers.html" target="_blank">click here</a>. If you believe you have a valid consumer law claim, please <a href="http://support.apple.com/kb/HE57">contact us</a>.</FONT></div>');
                 
                 
               //Begin:Added json Object:Espressp #14774083
              	 var jsonObj = {
                				'phoneSupportHasCoverage' : false,
                				'hwSupportHasCoverage' :    true,
                				'hwSupportCoverageValue' : 	'LI',
                				'hasActiveAPP':             false,
                				'isAPPEligible' :           false,
                				'isPPIEligible' :           false,
                				'productType' :             'iPhone',
                				'numDaysSinceDOP':          '315',
                				'hasTechToolDownload':       false
                	};
                
                 warrantyChecker.trackOmnitureResults(jsonObj);
                 
                 //End:Added json Object:Espressp #14774083

In der generierten Datei ist dagegen viel weiter oben nur ein:

HTML:
strSysProWCResp ="";

zu finden.

Ich hoffe jemand kann mir sagen wie ich meine Anfrage in Java gestalten muss so dass ich die richtige Seite vom Socket lesen kann.

Vielen Dank!
 
Ist es möglich, dass die zusätzlichen Daten im Browser zb. mit Javascript oder ähnlichem nachgeladen werden? Dann wäre ein reiner Request nicht hilfreich.
 
wie kann ich das rausfinden? Der search button ist verlinkt mit folgendem Code:

HTML:
<button id="warrantycheckbutton" class="happy" type="button" name="Continue"> Continue </button>
 
Wenn der Button in einer Form steht, welche auch eine Action angegeben hat, könntest du diese weiter anschauen.
Da allerdings der button vom type="button" und nicht type="submit" ist, ist Javascript sehr wahrscheinlich.

Im ersten Post scheint jQuery verwendet zu werden: Vielleicht findest du im Javascript-Code der Seite so etwas in der Art:
Code:
$('#warrantycheckbutton').on( "click", function( event ) {
});
 
Im Zweifel: Schalt im Browser einfach das Tracking der verschiedenen Events & Übertragungen an und guck nach, was passiert wenn du suchst.
 
Das habe ich schon mit firebug probiert, aber irgendwie fehlt mir wohl einiges an Wissen um das hinzubekommen.
 
Zurück
Oben