我有一个graphQL查询,我想将其作为原始请求执行,并且不想依赖任何客户端来执行此请求(我不想使用Android的apollo客户端来执行该请求)
我创建了构成此查询的字符串,并尝试使用OkHttp客户端发出此请求,但我认为由于每次发送请求时响应都是内部服务器错误而丢失了某些内容。但是,如果我使用Android的apollo-client执行此查询,则会返回响应。
这是我使用OkHttp执行原始查询请求的尝试:
val requestBodyString = " cities{\n" +
" name\n" +
" }"
fun makeRequest(url: String): Response{
val client = OkHttpClient()
val requestBody = RequestBody.create(null, requestBodyString)
val request = Request.Builder().url(url).post(requestBody)
.addHeader("content-type", "application/graphql").build()
return client.newCall(request).execute()
}
我遵循yelp documentation进行请求,但对我不起作用。我不知道为什么吗?
答案 0 :(得分:0)
尝试以JSON格式发送
val query = " cities{\n" +
" name\n" +
" }"
fun makeRequest(url: String): Response{
val client = OkHttpClient()
val json = JSONObject()
json.put("query",query)
val requestBody = RequestBody.create(null, json.toString())
val request = Request.Builder().url(url).post(requestBody)
.addHeader("content-type", "application/json").build()
return client.newCall(request).execute()
}
答案 1 :(得分:0)
我最近正在尝试类似的东西。我想到的解决方案是使用编码的查询参数访问URL。
String url = url + "query?" + URLEncoder.encode(query);
我已经成功使用OkHttp,但是我注意到其他一些客户端无法与GraphQl通信。
编辑:就其价值而言,我使用的URL不安全(http),并且我设置的唯一标头是用于基本身份验证的。