Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我收到Http/1.1400错误请求?_Java_Http_Httpclient - Fatal编程技术网

Java 为什么我收到Http/1.1400错误请求?

Java 为什么我收到Http/1.1400错误请求?,java,http,httpclient,Java,Http,Httpclient,下面是我的代码片段。我正在尝试使用HTTPOST登录该网站 我不断收到“400个坏请求”,我尝试了各种组合。我尝试将用户名/密码作为标题而不是NameValuePair传递。但同样的结果。 我有什么遗漏吗 HttpClient httpclient = new DefaultHttpClient(); HttpPost post = new HttpPost("https://identi.ca/main/login"); List <Na

下面是我的代码片段。我正在尝试使用HTTPOST登录该网站

我不断收到“400个坏请求”,我尝试了各种组合。我尝试将用户名/密码作为标题而不是NameValuePair传递。但同样的结果。 我有什么遗漏吗

HttpClient httpclient = new DefaultHttpClient();
        
HttpPost post = new HttpPost("https://identi.ca/main/login");
    

List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("nickname", u));
nvps.add(new BasicNameValuePair("password", p));
nvps.add(new BasicNameValuePair("submit", "Login"));

post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

HttpResponse response = httpclient.execute(post);
HttpEntity entity = response.getEntity();

Log.i("Login form POST result: ", response.getStatusLine().toString());
        
HttpClient-HttpClient=newdefaulthttpclient();
HttpPost=新的HttpPost(“https://identi.ca/main/login");
List-nvps=newarraylist();
添加(新的BasicNameValuePair(“昵称”,u));
添加(新的BasicNameValuePair(“密码”,p));
添加(新的BasicNameValuePair(“提交”、“登录”);
setEntity(新的UrlEncodedFormEntity(nvps,HTTP.UTF_8));
HttpResponse response=httpclient.execute(post);
HttpEntity=response.getEntity();
Log.i(“登录表单POST结果:”,response.getStatusLine().toString());

感谢您的帮助。

查看该登录页面的源代码,有一个名为
令牌的隐藏字段,您可能必须返回到服务器。您需要首先获取该页面的内容,提取令牌值,并将其包含在POST响应中。

如果HTTP服务认为您发送了无效/不正确/不适当的响应,它将发送400响应。无法从代码中判断实际发送的参数是什么,或者(更重要的是)服务器希望您发送什么

要诊断此问题,您需要:

  • 找出您的代码实际发送的内容,然后
  • 了解服务器希望您发送的内容
第二种可能涉及:

  • 查看具有web浏览器的普通用户用于发出请求的网页
  • 查看从服务器得到的400响应的主体
  • 查看服务器日志,和/或
  • 查看服务器的web API文档(或源代码)

在本例中,似乎需要提供一个额外的
标记
参数


然而,我怀疑你可能采取了完全错误的方法。“identi.ca”站点使用StatusNet,该站点有两个客户端。没有提到与我能看到的“登录”URL交谈。

虽然我知道正确答案已经标记,但我想给路过的其他人一些视觉效果。就我而言,这就是导致错误请求的原因

form.add(new BasicNameValuePair("return_url", "https://myexample.example.com/#/providermanageger?vi={VERIFICATION_INTENT_ID}"));
当我删除
/#/providermanager


它开始起作用了。因此,请继续尝试错误。

您需要向我们展示请求。试着从日志中获取它。我同意“identi.ca”已经发布了API。我正在尝试浏览网站和使用HTTP。谢谢Greg。我会让你知道事情的进展。