我试图在不允许我们使用互联网的工作场所中实现一些自动化(并非所有网站都允许使用)。
要求:我有一个表单,其中有一个文本框和一个提交按钮,我必须在文本框中输入一些内容并提交表单。我需要解析 HTML 并获取特定文本的响应。页面是用JSP编写的
限制:我无法访问第三方库并且必须使用 Java 6。
请引导我走向正确的方向。
我对异步任务有点陌生。
我有一个函数,可以获取学生 ID 并使用所需的 ID 从特定大学网站上抓取数据。
private static HttpClient client = new HttpClient();
public static async Task<Student> ParseAsync(string departmentLink, int id, CancellationToken ct)
{
string website = string.Format(departmentLink, id);
try
{
string data;
var stream = await client.GetAsync(website, ct);
using (var reader = new StreamReader(await stream.Content.ReadAsStreamAsync(), Encoding.GetEncoding("windows-1256")))
data = reader.ReadToEnd();
//Parse data here and return Student.
} catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
并且它工作正常。有时虽然我需要为很多学生运行这个函数,所以我使用以下命令
for(int i = ids.first; i <= ids.last; i++)
{
tasks[i - ids.first] = ParseStudentData.ParseAsync(entity.Link, i, …Run Code Online (Sandbox Code Playgroud) 我正在从 Http 转移到 HttpClient,但现在我无法使用 map() 对结果进行排序,因此出现了一些错误。
使用 HttpClient,我得到“对象”类型上不存在属性“排序”。
this.getConcept().subscribe(res => {
res.sort((f, n): number => {
if (f.code < n.code) return -1;
if (f.code > n.code) return 1;
return 0;
});
console.error(res);
this.arrConcept = res;
});
Run Code Online (Sandbox Code Playgroud)
使用 Http 我可以毫无问题地对其进行排序
this.getConcept().map(this.extractData).subscribe(res => {
res.sort((f, n): number => {
if (f.code < n.code) return -1;
if (f.code > n.code) return 1;
return 0;
});
console.error(res);
this.arrConcept = res;
});
Run Code Online (Sandbox Code Playgroud) 我有一个 Java/Spring 项目,其中使用 Oauth2RestTemplate 并使其使用 HttpClient (org.apache.http.client.Httpclient) 而不是默认的 SimpleClient
HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
oAuth2RestTemplate.setRequestFactory(requestFactory);
Run Code Online (Sandbox Code Playgroud)
对此,我想知道/理解是否始终为所有请求发送保持活动标头?
如果总是发送,有办法禁止发送吗?我看到一篇文章 -在 Apache HttpClient 中禁用 Keep Alive,其中讨论了禁用它,但它建议对 httpMethod 进行设置。我不确定如何在上面描述的代码设置中访问此 httpMethod。
我是新手,我有一个 HTTPclient 服务,它从一个 JSON 文件中获取所有数据,有 1000 个寄存器,我如何进行分页,例如,显示前 10 个并对其进行分页
这是我的服务
@Injectable({
providedIn: 'root'
})
export class ProductsService {
constructor(private http:HttpClient ) {
}
getPorducts(): Observable<Product[]> {
return this.http.get<Product[]>('assets/data/DATA.json');
}
}
Run Code Online (Sandbox Code Playgroud)
我只是在我的家庭组件上使用它
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styles: []
})
export class HomeComponent implements OnInit {
public products: any[] = [];
constructor(private _Products: ProductsService) { }
public lastKey: any[] = [];
ngOnInit() {
this._Products.getPorducts().subscribe(data => {
if (data) {
this.products = data;
}
});
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到呢?提前致谢
我有一个端点,它返回一个 csv 数据集,该数据集将使用保存saveas,Blob\nAngularJS 前端工作正常,而 Angular 8 则很困难。\n这是我的 Angular 8 实现
const headers = new HttpHeaders({\n Accept: \'text/csv\',\n });\n const options = { headers };\n this.httpClient\n .post<ExportCsvSettingsViewDto>(this.appConfigService.buildApiUrl(this.loadPath(batchId)), csvDto, options)\n .subscribe((fileResult: any) => {\n const file = new Blob([fileResult], { type: \'text/csv\' });\n saveAs(file, this.fileName + \'.csv\');\n });\nRun Code Online (Sandbox Code Playgroud)\n\n这会导致以下HttpErrorResponse情况:\n Object {error: SyntaxError: Unexpected token 。在 JSON 中,位于 positio\xe2\x80\xa6,文本:“1.112.373;en-US\n日期时间 UTC;日期本地时间;Bat\xe2\x80\xa6”}
我怀疑这是因为HttpClient将响应视为而JSON不是"text/csv"\n那些是请求标头:
Connection: keep-alive\nContent-Length: 141\nPragma: no-cache\nCache-Control: no-cache\nAccept: text/csv\nContent-Type: …Run Code Online (Sandbox Code Playgroud) 我在HttpClient中遇到一个已知的错误。每当服务器响应包含"UTF-8"(包括引号)时,都会触发异常:
The character set provided in ContentType is invalid. Cannot read content as string using an invalid character set. ---> System.ArgumentException: '"utf-8"' is not a supported encoding name.
Run Code Online (Sandbox Code Playgroud)
示例代码:
HttpClient _client = new HttpClient();
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, "https://www.facebook.com");
requestMessage.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.4044.55 Safari/537.36");
HttpResponseMessage response = _client.SendAsync(requestMessage).GetAwaiter().GetResult();
Run Code Online (Sandbox Code Playgroud)
通常的解决方法是什么?我正在使用.NETFramework 4.6.1。
使用java.net.http.HttpClient以下配置将请求发送到 BitBucket API:
var url = "https://bitbucket.org/api/2.0/repositories/asomov/snakeyaml/issues/377";
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.ALWAYS)
.version(HttpClient.Version.HTTP_2)
.build();
HttpRequest request = HttpRequest.newBuilder()
.GET()
.uri(URI.create(url))
.setHeader("User-Agent", "Java 11 HttpClient Bot")
.timeout(Duration.ofSeconds(5))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
Run Code Online (Sandbox Code Playgroud)
总是抛出以下异常:
java.io.IOException: /192.168.1.126:58337: GOAWAY received
at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:576)
at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:119)
Caused by: java.io.IOException: /192.168.1.126:58337: GOAWAY received
at java.net.http/jdk.internal.net.http.Http2Connection.handleGoAway(Http2Connection.java:985)
at java.net.http/jdk.internal.net.http.Http2Connection.handleConnectionFrame(Http2Connection.java:853)
at java.net.http/jdk.internal.net.http.Http2Connection.processFrame(Http2Connection.java:724)
at java.net.http/jdk.internal.net.http.frame.FramesDecoder.decode(FramesDecoder.java:155)
at java.net.http/jdk.internal.net.http.Http2Connection$FramesController.processReceivedData(Http2Connection.java:232)
at java.net.http/jdk.internal.net.http.Http2Connection.asyncReceive(Http2Connection.java:649)
at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.processQueue(Http2Connection.java:1275)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SynchronizedRestartableTask.run(SequentialScheduler.java:175)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:147)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:198)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:271)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:224)
at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.runOrSchedule(Http2Connection.java:1293)
at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.onNext(Http2Connection.java:1319)
at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.onNext(Http2Connection.java:1253)
at …Run Code Online (Sandbox Code Playgroud) 有返回大型 JSON 数据示例结果的 REST-API:
{
"arrayA":[
{
"data1":"data",
"data2":"data"
},..
],
"arrayB":[
{
"data1":"data"
},..
]
}
Run Code Online (Sandbox Code Playgroud)
“arrayA”可能只记录 0 到 100 条记录,但“arrayB”可能有 100 万到 1000 万条记录,这会使我的 java 应用程序内存不足。我的问题是如何处理这个案子。
我有一个使用 执行请求的服务方法HttpClient。服务类构造函数IHttpClientFactory使用以下代码注入并创建客户端:
_httpClient = httpClientFactory.CreateClient(url);
Run Code Online (Sandbox Code Playgroud)
在我的测试构造函数中,我试图模拟PostAsync方法响应。
public MyServiceUnitTests()
{
_HttpClientMock = new Mock<IHttpClientFactory>();
var mockHttpMessageHandler = new Mock<HttpMessageHandler>();
mockHttpMessageHandler.Protected()
.Setup<Task<HttpResponseMessage>>("PostAsync", ItExpr.IsAny<string>(), ItExpr.IsAny<HttpContent>())
.ReturnsAsync(new HttpResponseMessage{ StatusCode = HttpStatusCode.OK });
var httpClient = new HttpClient(mockHttpMessageHandler.Object);
_HttpClientMock.Setup(x => x.CreateClient(It.IsAny<string>())).Returns(httpClient);
_Service = new MyService(_HttpClientMock.Object);
}
Run Code Online (Sandbox Code Playgroud)
设置mockHttpMessageHandler 时出现以下错误:System.ArgumentException: 'No protected method HttpMessageHandler.PostAsync found whose signature is compatible with the provided arguments (string, HttpContent).'
我究竟做错了什么?
httpclient ×10
java ×4
angular ×3
c# ×3
http ×2
spring ×2
arrays ×1
asp.net-core ×1
asynchronous ×1
bitbucket ×1
http-headers ×1
javascript ×1
keep-alive ×1
moq ×1
parsing ×1
sorting ×1
task ×1
typescript ×1