Я пишу собственный, но простой клиент для тестирования веб-сервисов elgg с Java. Я хочу отправить запрос на сервер с простым параметром, но.
Вот моя разоблаченная функция в elgg:
function hello_world($name) {
return "Hello ".$name;
}elgg_ws_expose_function(
"test.echo",
"hello_world",
array("name" => array("type" => "string", "required" => true)),
'A testing method which echos back a string',
'POST',
false,
false
);
и вот мой Java-код для отправки запроса:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package readjson;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;public class Main {
public static void main(String[] args) {try {
CloseableHttpClient client = HttpClients.createDefault();
JSONObject object = new JSONObject();
String name = "Mousa";
object.put("name", name);
HttpPost httpPost = new HttpPost("http://localhost/elgg/services/api/rest/json?method=test.echo");
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
StringEntity entity = new StringEntity(object.toJSONString());
System.out.println(object);
httpPost.setEntity(entity);
CloseableHttpResponse response = client.execute(httpPost);
System.out.println(response.getStatusLine().getStatusCode());
HttpEntity httpEntity = response.getEntity();
StringBuilder stringBuilder = new StringBuilder();
InputStream inputStream = httpEntity.getContent();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
inputStream.close();
System.out.println(stringBuilder.toString());
client.close();
}
catch(Exception ex) {
System.out.println(ex.getLocalizedMessage());
}
}
}
Но я получаю этот вывод, и есть проблема с почтовым запросом. Я не знаю, что не так с этим кодом:
{"name":"Mousa"}
200{"status":-1,"message":"Missing parameter name in method test.echo"}
Это говорит о том, что параметр «имя» отсутствует !!!
Пожалуйста помоги
Насколько я помню, веб-сервисы Elgg не могут обрабатывать JSON в теле запроса, вместо этого использовать сериализованную строку запроса, например:
name=Mousa&interest[]=interest1&interest[]=interest2
Элгг, скорее всего, будет использовать parse_str()
, так что это может быть полезно: http://php.net/manual/en/function.parse-str.php
Других решений пока нет …