Biscoitos ... Http POST não corretamente trabalho, por quê?
-
19-09-2019 - |
Pergunta
Provavelmente esta é muitas vezes problema, mas eu não posso resolvê-lo. Eu preciso preencher automaticallly alguns campos no formulário web, que é dado a partir do servidor. Eu uso Apache HttpClient para fazer mais fácil a minha vida) Até agora, pode-se considerar os meus passos para conseguir o objetivo:
-
1. Não tenho certificado para http://trac.edgewall.org/ então eu descarregar este programa e instalar localmente e no acabamento eu vou ter que criar newticket.
-
2. I localmente usar Trac sem qualquer SSL (túnel SSL). (Não é difícil mudar o meu programa para ser capaz de usar HTTPS).
-
3. Entretanto, posso autenticar e executar o pedido GET, mas não posso executar o pedido POST
-
4. Por exemplo: eu executo GET solicitação para o http: // localhost: 8000 / tracenvir / newticket .
Este (~ / newticket) página olha como a seguir:
http://s04.radikal.ru/i177/0912/cb/d43971cebc02. png
E, como resposta eu tenho: (parte dela)
-
"Input type =" "id = "text campo-summary" name = "" size = "field_summary 70""
- "id textarea =" campo de descrição de "name = "field_description" class = "wikitext" linhas = "10" cols = "68"/ textarea"'
- 5. Então, eu escrevo isto:
int status = 0;
int cookLength=0;
Cookie[] cookies = null;
HttpClient client = new HttpClient();
client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
HttpState initialState = new HttpState();
client.setState(initialState);
//**********//
//**Log in**//
//**********//
GetMethod login = new GetMethod("http://localhost:8000/tracenvir/login");
client.getState().setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("rauch", "qwert"));
login.setDoAuthentication(true);
System.setProperty("javax.net.ssl.trustStore", "/home/rauch/NetBeansProjects/jssecacerts");
try {
status = client.executeMethod(login);
System.out.println("response code = "+status);
cookies = client.getState().getCookies();
cookLength = cookies.length;
for(int i=0;i (less than) cookLength;i++) {
System.out.println(cookies[i].toString());
}
login.releaseConnection();
} catch(IOException ex) {
ex.printStackTrace();
}
//*********************//
//**Create New Ticket**//
//*********************//
PostMethod post = new PostMethod("http://localhost:8000/tracenvir/newticket");
NameValuePair[] data = {
new NameValuePair("field-summary","second error"),
new NameValuePair("field-descryption","Some stupid descryption..."),
new NameValuePair("field-type","defect"),
new NameValuePair("field-priority","major"),
new NameValuePair("field-version","1.0"),
new NameValuePair("field-owner","moscow server"),
new NameValuePair("submit","create ticket"),
};
//post.setRequestBody(data);
post.addParameters(data);
post.addRequestHeader("Referer","http://localhost:8000/tracenvir/login");
for(int i=0;i (less than) cookLength;i++) {
initialState.addCookie(cookies[i]);
}
client.setState(initialState);
try {
status = client.executeMethod(post);
System.out.println("response code = "+status);
byte[] buf = new byte[10];
int r=0;
BufferedInputStream is = new BufferedInputStream(post.getResponseBodyAsStream());
while((r = is.read(buf)) > 0) {
System.out.write(buf, 0, r);
}
post.releaseConnection();
} catch(IOException ex) {
ex.printStackTrace();
}
}
E eu tenho este:
-
400 Erro: Bad Request
-
Falta ou formulário inválido token. Você tem os cookies ativados?
O que há de errado?
- Como resposta a pedido GET fico com esta:
- código de resposta = 200
trac_auth = 38144ec2830678183afebf0b14c51721
-
trac_form_token = e9648f17987551b8f97e1953
Provavelmente eu nedd alterar esta:
- client.getParams () setCookiePolicy (CookiePolicy.BROWSER_COMPATIBILITY).;
Solução
http://www.google.com /support/toolbar/bin/answer.py?hl=en&answer=47972
Eu acho link acima irá ajudá-u sobre este tema. seu vídeo dão também .. eu espero que sua consulta será resolvido
Este site lhe dará um software que irá fornecer formulário de auto enchimento. fornecida pela Microsoft.
Outras dicas
Ok. Este link abaixo é sobre o método post. Eu acho que poderia ajudar u.
http: / /www.willmaster.com/library/manage-forms/automatic-form-submission-to-a-cgi-program.php
dá-me responder. se isso não acontecer.