我需要使用Selenium检查HTTP响应头的最佳方法.我环顾了Selenium文档并没有看到任何简单的方法.非常感谢帮助.
如何获取使用WebClient从WebAPI控制器返回的Content-Disposition参数?
WebApi控制器
[Route("api/mycontroller/GetFile/{fileId}")]
public HttpResponseMessage GetFile(int fileId)
{
try
{
var file = GetSomeFile(fileId)
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StreamContent(new MemoryStream(file));
response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = file.FileOriginalName;
/********* Parameter *************/
response.Content.Headers.ContentDisposition.Parameters.Add(new NameValueHeaderValue("MyParameter", "MyValue"));
return response;
}
catch(Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex);
}
}
Run Code Online (Sandbox Code Playgroud)
客户
void DownloadFile()
{
WebClient wc = new WebClient();
wc.DownloadDataCompleted += wc_DownloadDataCompleted;
wc.DownloadDataAsync(new Uri("api/mycontroller/GetFile/18"));
}
void wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
WebClient wc=sender as WebClient;
// Try to extract the filename from …Run Code Online (Sandbox Code Playgroud) c# webclient httpresponse content-disposition asp.net-web-api2
我多次联系Web服务以通过HttpGet和获取JSON字符串DefaultHttpClient.
...
DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = (HttpResponse)defaultHttpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
...
Run Code Online (Sandbox Code Playgroud)
我发现LogCat是打印接口名称:null,每次都执行标签System.outHttpResponse httpResponse = (HttpResponse)defaultHttpClient.execute(httpGet);.
我正确地建立这个http连接HttpGet吗?有不同的方式吗?
如何创建此连接而不是获取接口名称:来自System.out标记的null LogCat消息?
我刚刚开始使用REST,我一直在阅读这篇文章和上面提到的关于REST 响应代码的书.但是,当我查看Play的Controller类时,它似乎仅限于返回
这似乎遗漏了一些可能有用的代码:
毕竟不需要那些吗?Play会自动处理这些情况吗?
此外,似乎一个控制器无法很好地处理相同资源的REST请求和正常网页请求,因为始终返回网页200.我错过了什么吗?
是否有使用HTTP标头进行登录成功/失败响应的标准?
我使用以下代码片段生成一个我发送给客户端的vcard:
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", fileNameOnly));
Response.ContentType = "text/x-vcard";
Response.ContentEncoding = Encoding.GetEncoding("ISO-8859-1");
Response.Write(vCard.ToString());
Response.End();
Run Code Online (Sandbox Code Playgroud)
但是,我需要在内部具有控件和UpdatePanel的页面上使用vCards.不幸的是,根据更新面板和响应写入, 这不起作用并导致错误.我想知道什么是将vcard /文件的内容发送到客户端浏览器的其他方法,并让它显示"打开/保存"对话框,不涉及Response.Write?
我正在使用节点v0.12.7并希望直接从数据库流到客户端(用于文件下载).但是,在使用流时,我注意到大量内存占用(以及可能的内存泄漏).
使用express,我创建了一个端点,只需将可读流管道到响应中,如下所示:
app.post('/query/stream', function(req, res) {
res.setHeader('Content-Type', 'application/octet-stream');
res.setHeader('Content-Disposition', 'attachment; filename="blah.txt"');
//...retrieve stream from somewhere...
// stream is a readable stream in object mode
stream
.pipe(json_to_csv_transform_stream) // I've removed this and see the same behavior
.pipe(res);
});
Run Code Online (Sandbox Code Playgroud)
在生产中,可stream读取数据库中的数据.数据量非常大(1M +行).我用虚拟流交换了这个可读流(参见下面的代码)以简化调试并注意到相同的行为:我的内存使用量每次都会跳跃大约200M.有时垃圾收集会启动并且内存会下降一点,但它会线性上升,直到我的服务器内存不足.
我开始使用流的原因是不必将大量数据加载到内存中.这种行为有望吗?
我还注意到,在流式传输时,我的CPU使用率跳跃到100%并阻塞(这意味着其他请求无法处理).
我错误地使用了这个吗?
// Setup a custom readable
var Readable = require('stream').Readable;
function Counter(opt) {
Readable.call(this, opt);
this._max = 1000000; // Maximum number of records to generate
this._index = 1;
}
require('util').inherits(Counter, Readable);
// Override internal …Run Code Online (Sandbox Code Playgroud) 我正在尝试使一些微服务更具弹性,并且重试某些类型的HTTP请求将有助于此.
重试超时会给客户带来非常缓慢的体验,因此我不打算在这种情况下重试.重试400s无济于事,因为错误的请求在几毫秒后仍然是一个错误的请求.
我想还有其他原因不能重试一些其他类型的错误,但是哪些错误以及为什么?
我已经设置了一些日志中间件,可以使用 HttpContext 获取和记录信息。
我需要将 HttpResponse.Body 的位置设置为 0 以读取整个流,但是,无论我尝试什么,它都会抛出“不支持指定的方法”并失败。
这对我来说很奇怪,因为 position 内置于 HttpResponse.Body 中,我之前成功使用过它。
我还尝试使用 HttpResponse.Body.Seek 获得相同的结果。
在这一点上我被卡住了,任何帮助将不胜感激。
更新:一旦我将 response.body 移动到新的内存流中,我就能够改变它的位置,但是,现在它返回一个空的主体。
public async Task Invoke(HttpContext context)
{
//Retrieve request & response
var request = context.Request;
var response = context.Response;
if (request.Path != "/")
{
var reqBody = request.Body;
var resBody = response.Body;
string path = request.Path;
string method = request.Method;
string queryString = HttpUtility.UrlDecode(request.QueryString.ToString());
int statusCode = context.Response.StatusCode;
var buffer = new byte[Convert.ToInt32(request.ContentLength)];
await request.Body.ReadAsync(buffer, 0, buffer.Length);
var reqBodyText = Encoding.UTF8.GetString(buffer); …Run Code Online (Sandbox Code Playgroud) 为了我的研究,我需要 cURL fqdn 并获取它们的状态代码。(对于 Http、Https 服务)但是有些 http url 以 https 的形式打开,尽管它使用 cURL 返回 200。(请求成功,无重定向)
curl -I http://example.example.com/
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 22 Nov 2021 10:43:32 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 64991
Connection: keep-alive
Keep-Alive: timeout=20
Vary: Accept-Encoding
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Link: <https://example.example.com/>; rel=shortlink
X-Powered-By: WP Engine
X-Cacheable: SHORT
Vary: Accept-Encoding,Cookie
Cache-Control: max-age=600, must-revalidate
X-Cache: HIT: 10
X-Cache-Group: normal
Accept-Ranges: bytes
Run Code Online (Sandbox Code Playgroud)
如上所示,我收到了 200 个带有curl 请求的响应。但我可以在浏览器中看到 307 代码。(如下图所示)
Request URL: http://example.example.com/
Request Method: …Run Code Online (Sandbox Code Playgroud) httpresponse ×10
http ×4
c# ×2
android ×1
apache ×1
asp.net ×1
curl ×1
http-get ×1
http-headers ×1
httpclient ×1
httpcontext ×1
https ×1
hystrix ×1
javascript ×1
logcat ×1
memory-leaks ×1
node.js ×1
rest ×1
selenium ×1
spring-retry ×1
stream ×1
updatepanel ×1
webclient ×1