java - 通过apache客户端调用发布请求时,在索引0错误的方案名称中获取非法字符
问题描述
我正在尝试在我的 java 代码中执行 apache 客户端 httppost 调用。我能够使用 curl 命令成功执行的 url 如下 -
curl --insecure -ksS -f -u ":Token" -X POST "https://serverurl/rest/datasource/imports/1234567?pretty=true" -F "query=select * from empschema.employee_table"
我编写了一个 java 代码来生成与 curl 命令 url 相似的 URL
"https://serverurl/rest/datasource/imports/1234567?pretty=true" -F "query=select * from empschema.employee_table"
我正在使用 apache 客户端 HTTP post 方法。但我不断收到如下错误。
java.net.URISyntaxException: Illegal character in scheme name at index 0: "https://serverurl/rest/datasource/imports/1234567?pretty=true" -F "query=select * from empschema.employee_table"
有人能告诉我我的代码到底有什么问题吗?我什至尝试删除 url 开头和结尾处的 " 并生成如下所示的 url
https://serverurl/rest/datasource/imports/1234567?pretty=true" -F "query=select * from empschema.employee_table
但是在调用 httpclient post 调用时,它会引发错误
java.net.URISyntaxException:索引 111 处的查询中存在非法字符:
package com.controller;
@RestController
public class Test {
@RequestMapping(value = "/query/{queryId}", method = RequestMethod.POST, produces = "application/json")
@ApiOperation(value = "This API posts a new dataset using query")
@ApiResponses(value = { @ApiResponse(code = 200, message = "Successfully added new dataset details"),
@ApiResponse(code = 404, message = "Unable to add new dataset details"),
@ApiResponse(code = 500, message = "Internal server error") })
public InputStream DatasourceImport() throws ClientProtocolException,Exception {
String baseUrl="\"https://serverurl/rest/datasource/imports/";
String dataSourceId="1234567";
String query = "select * from empschema.employee_table\"";
String fchar = " -F ";
String url = baseUrl + dataSourceId + "?pretty=true\"" + fchar + "\"query=" + query;
HttpClient client = HttpClientBuilder.create().build();
HttpPost postRequest = new HttpPost(url);
String auth = ":8f5bbe9382f0418d9cf9e5637e177a75";
byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes(Charset.forName("UTF-8")));
String authHeader = "Basic " + new String(encodedAuth);
postRequest.addHeader(HttpHeaders.AUTHORIZATION, authHeader);
HttpResponse response = client.execute(postRequest);
HttpEntity entity = new BufferedHttpEntity(response.getEntity());
return entity.getContent();
}
}
我想成功执行 post 调用并使用我的 apache 客户端的 http post 方法加载数据。
解决方案
推荐阅读
- angular - 如何知道 Angular 6 中附加到 UI 元素的事件侦听器?
- c# - 使用 C# asp.net mvc 代码优先方法在 Razor 中验证 @Html.DropDownList 和 @Html.DropDownListFor
- events - 发生错误时如何设置作业以重新启动服务器
- python - 来自hdf文件python的纬度,经度信息
- firebase - 我如何使用统一从 Firebase 发送短信
- php - XAMPP 和 Interbase:在 Windows 10 上调用未定义的函数 base_connect()
- elasticsearch - Elasticsearch:未知字段 [min_doc_count]
- java - 斯坦福 coreNLP 情感分析调试需要太多时间
- c# - 检查任务是否正在等待或忙碌
- python - 无法加载图表。将图加载到 igraph(来自任意源)“返回 NULL”