我正在尝试在REST后端执行HTTP post请求。后端的URL使用SSL,因此我还添加了必要的代码来处理它。但我收到了以下回复:
无法POST / api
这是我的代码:
protected String doInBackground(String... args) {
try {
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
DefaultHttpClient client = new DefaultHttpClient();
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
registry.register(new Scheme("https", socketFactory, 443));
SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry);
DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams());
HttpPost post = new HttpPost("https://test-api.smart-trial.dk/api");
List <NameValuePair> nvps = new ArrayList <NameValuePair>(2);
nvps.add(new BasicNameValuePair("path[pathwayId]","5566e151817a62021b1ea809"));
nvps.add(new BasicNameValuePair("formData[firstname]","Name"));
nvps.add(new BasicNameValuePair("formData[lastname]","XXX"));
nvps.add(new BasicNameValuePair("formData[email]","example@mail.com"));
post.addHeader("Referer" ,"https://myurl.com/api");
post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
//DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(post);
HttpEntity entity = response.getEntity();
if (entity != null) {
// get the response content as a string
String stringResponse = EntityUtils.toString(entity);
Log.d("Response", stringResponse);
}
代码中有什么问题吗?或者至少为什么我得到那个回应。
修改
我也有一些参数规则。
&#34;帖子应该使用x-www-form-urlencoded身体参数&#34;
通过使用x-www-form-urlencoded的post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
,我或多或少地想到了这一点。
参数:
答案 0 :(得分:1)
听起来您的服务器未配置为允许对该URL的POST请求。但是你需要一种方法来验证它。
如果您的浏览器还没有REST测试插件,请找一个允许您输入POST请求数据的插件,下载并安装它。
然后在浏览器插件中复制POST数据,提交请求并查看服务器的响应。
至少这可以帮助您确定问题是在应用程序中还是在服务器中。