2010-11-21 11 views
1

Java'da, bir web sitesinde oturum açma işlemini simüle etmek için Apache HttpComponents Client'ı kullanmaya çalışıyorum. Şu anda başarısız oluyor ve neden emin değilim. Eşdeğer tarayıcı olaylarını denemek ve anlamak için Firefox'ta Firebug kullanıyorum ve eminim bir formda belirli bir POST yöntemi ile giriş yaptığından eminim.Hatalı HTTP girişimi nasıl gidermeliyim?

İşte kodum. Sonunda bir grup kurabiyenin ayarlanmasını bekledim, ancak öyle değiller ve sonraki GET isteklerine ulaştığım yanıtlar girişin başarısız olduğunu kanıtlıyor.

String email = ... 
String password = ... 
String url = ... 
DefaultHttpClient client = new DefaultHttpClient(); 
List<NameValuePair> loginParams = new ArrayList<NameValuePair>(2); 
loginParams.add(new BasicNameValuePair("logindetails[email]", email)); 
loginParams.add(new BasicNameValuePair("logindetails[password]", password)); 
UrlEncodedFormEntity loginEntity = new UrlEncodedFormEntity(loginParams); 
HttpPost loginPost = new HttpPost(url); 
loginPost.setEntity(loginEntity); 
HttpResponse loginResponse = client.execute(loginPost); 
HttpEntity loginRepsonseEntity = loginResponse.getEntity(); 
loginRepsonseEntity.consumeContent(); 

for (Cookie cookie: client.getCookieStore().getCookies()) { 
    System.out.println(cookie.getName() + " -> " + cookie.getValue()); 
} 

Sorunu aramaya nereden başlamalıyım? POST'un tarayıcımınkiyle aynı olduğunu doğrulamak isterim - bunu yapmanın en iyi yolu nedir?

cevap

2

Çalıştığım her gün Apache HttpClient öğelerini kullanıyoruz, harika. Ne yapıyorsunuz, verileri kendiniz kodluyorsunuz, bana biraz garip geliyor. daha kolay bir yol var. Bir POST yaptığınızı varsayacağım.

String email = ... 
String password = ... 
String url = ... 

PostMethod post = new PostMethod(url); 

NameValuePair[] data = { 
    new NameValuePair("logindetails[email]", email), 
    new NameValuePair("logindetails[password]", password) 
}; 

post.setRequestBody(data); 

// execute method and handle any error responses. 

HttpClient httpclient = new HttpClient(); 

int statusCode = httpclient.executeMethod(post); 

// continue as neccessary 

ben bu kodu aldı (ve daha iyi senin sığacak şekilde değiştirilmiş) Apache HttpClient sitesinden. İyi bir nedeniniz olmadığı sürece, alanları UrlEncodedFormEntity ile kendiniz paketlemeniz gerekmez.

Bu tür bir hata ayıklamada olduğu gibi, paketlerin ileri geri gitmesini izlemek için WireShark'u kullanarak izlemek en kolay yol olabilir. Bunlardan herhangi biri, isteklerin ileri geri gitmesini (HTTPS kullanmadığınız sürece) izleyebilmenizi sağlar. Böylece, bir tarayıcının gönderdiği mesajla karşılaştırarak neyin yanlış gönderildiğini kolayca söyleyebilirsiniz. Bu, dünyadaki kullanıcı dostu program değil, ama bu tür şeyleri anlamaya çalışırken çok değerli.

1

Web sayfası kullandığınızda gönderinin nasıl yapıldığını araştırmak için Net-sekmesine bakmak üzere Firefox'ta Firebug'u kullanabilirsiniz. Kodunuza bakarsak, tahmin ettiğim parametre isimleriniz garip. logindetails[email] ve logindetails[password] tuhaf görünüyor.

Bu

sahip eşdeğer olacaktır:

<form action="...url" method="post"> 
    email: <input type="text" name="logindetails[email]"/><br/> 
    password: <input type="password" name="logindetails[password]"/><br/> 
    <input type="submit" value="submit"/> 
</form> 

o amaçladığınız ne emin olun ... harika cURL yardımcı olarak

+0

Evet, girdiler gerçekten bu garip isimlere sahipler ... – HenryTyler2

+0

Tamam, sonra bir sonraki çek, net-sekmeyi kontrol etmek için ateş böceğini kullanmak olacaktır. Ardından, HttpClient'te hata ayıklamayı açın ve gönderinin içeriğini karşılaştırın. –

+0

Bunlar garip. Php bu etiketleri destekler ve bunları diziler olarak yorumlar. – ZeissS

0

Bak ->http://curl.haxx.se/docs/manpage.html.

Unix/Linux'ta her yerde bulunur ve Windows'ta Cygwin altında kullanılabilir.

Java'da yapmaya çalıştığınız şeyi komut satırından birkaç tuşa basmanıza olanak sağlar.

İlgili konular