大家好,祝圣诞快乐!
我最近在StackOverflow上提出了一个问题:Android app sends data to PHP script - Expectation failed
我没有得到预期的答案,所以我尝试了新的线索。
首先,我发现有人在此网站上收到同样的错误:http://www.anddev.org/novice-tutorials-f8/doing-http-post-with-the-current-sdk-t5911-15.html
----------------------------引用--------------- ---------------------------------
你好! 我需要一些帮助..我已经测试了这个论坛和其他网站上的每个代码,对它们进行消毒或者使用书面形式,但我总是返回相同的错误:417期望失败..我对状态错误不了解从404,500,等等.. 有经验的人有线索吗? 非常感谢你!如果有人会找到答案,我会用一些开放的代码为这个论坛努力工作!!您的代码无法运行的原因可能是因为您不了解如何构建HTTP请求。代码很好,你的标题和内容可能不是!
使用网络协议分析器(如Wireshark)或FireBug或Chrome的内置开发工具,阅读您对网站发出的POST请求,然后在Android中重建它们(使用相同的标题)。
---------------------------- UNQuote --------------- ---------------------------------
我尝试使用wireshark,结果就是我不使用
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("Name", "Noon"));
nameValuePairs.add(new BasicNameValuePair("Level", "0"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
发送的消息是httpPost
但是当我使用nameValuePairs时,不会发送HttpPost。
我真的迷失了这个错误。
事先谢谢。
答案 0 :(得分:1)
您的问题不是POST问题,它是HttpClient服务器问题......您可以使用简单的设置解决它。下面是对正在发生的事情的简要说明,但您可以在android文档中的CoreProtocolPNames.USE_EXPECT_CONTINUE
内找到更多信息。
在发送实体内容(即名称 - 值对)之前,HttpClient正在请求服务器以“100-continue”语句(“Expect:100-continue”握手)进行响应。如果服务器无法执行此操作,则其响应将返回为417,并且不会发送实体。您可以通过在初始化HttpClient时使用以下行来停止握手:
mHttpClient = new DefaultHttpClient();
params = HttpClient.getParams();
params.setParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE,false);
该设置应该阻止您的代码请求握手,并且应该立即发送实体。