Java를 HTTPS 웹 페이지로 보내고 모든 인증서를 수락하고 양식을 작성하고 POST를 통해 데이터를 제출 한 다음 소스를 출력합니다. 결과 페이지. 자바에서 어떻게 가능할까요? (특히 안드로이드 앱의 범위 내에서)?Java를 사용하여 HTTPS 웹 사이트에 POST 양식 입력 및 제출
"http://alien.dowling.edu/~vassil/tutorials/javapost.php"에서 아래 코드를 조합하고 "http://stackoverflow.com/questions/1828775/httpclient-and"에있는 Kevin의 답변을 작성했습니다. -ssl "이지만 BufferedReader를 인쇄하면 결과 페이지의 소스 대신 정보가 채워진 양식 만 인쇄됩니다.
제출이 호출되면 JavaScript는 JavaScript를 사용하여 스크립트가 실행되고 URL 자체는 변경되지 않지만 스크립트의 반환 된 결과를 반영하기 위해 페이지의 내용이 변경됩니다. 그러나 현재 프로그램은 여전히 새 업데이트 된 페이지의 원본을 반환하지 않습니다. - 지금 Paradius
이 코드가 어디서 잘못 나에게 보여줄 수 있습니까? 미리 감사드립니다!
import java.io.*;
import java.net.*;
import javax.net.ssl.*;
import java.util.*;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class JavaPOST
{
public static void doSubmit(String url, Map<String, String> data) throws Exception
{
//SSL Certificate Acceptor
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
SSLContext.setDefault(ctx);
URL siteUrl = new URL(url);
HttpsURLConnection conn = (HttpsURLConnection)siteUrl.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setHostnameVerifier(
new HostnameVerifier()
{
@Override
public boolean verify(String arg0, SSLSession arg1)
{
return true;
}
});
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
Set keys = data.keySet();
Iterator keyIter = keys.iterator();
String content = "";
for(int i=0; keyIter.hasNext(); i++)
{
Object key = keyIter.next();
if(i!=0)
{
content += "&";
}
content += key + "=" + URLEncoder.encode(data.get(key), "UTF-8");
}
//System.out.println(content);
out.writeBytes(content);
out.flush();
out.close();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "";
while((line=in.readLine())!=null)
{
System.out.println(line);
}
System.out.println(conn.getURL());
}
public static void main(String[] args)
{
Map<String, String> data = new HashMap<String, String>();
data.put("start_time", "103000");
data.put("end_time", "210000");
try
{
doSubmit("https://somedomain/webpage.html", data);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
class DefaultTrustManager implements X509TrustManager
{
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
제출이 호출 될 때 JavaScript가 JavaScript를 사용하여 스크립트가 실행되고 URL 자체는 변경되지 않지만 페이지의 내용이 스크립트의 반환 된 결과를 반영하도록 변경된다는 사실을 잊어 버렸습니다. . 그러나 현재 프로그램은 여전히 새 업데이트 된 페이지의 원본을 반환하지 않습니다. – Paradius
글쎄, 안드로이드 클라이언트는 자바 스크립트에 대해 아무 것도 모른다. 따라서 결과를 얻을 수있는 방법이 없다. 스크립트를 실행해야하는 경우 대신 WebView가 필요할 수 있습니다. –
페이지가 스크립트를 실행하면 페이지가 다른 페이지로 이동하지만 모양이 다르기 때문에 사용자가 다른 소스를 "리디렉션"하는 경우에도 마찬가지입니다. – Paradius