GVKun编程网logo

带有文本/ html响应的反应式WebClient GET请求(html响应头)

15

如果您想了解带有文本/html响应的反应式WebClientGET请求的相关知识,那么本文是一篇不可错过的文章,我们将对html响应头进行全面详尽的解释,并且为您提供关于C#HttpWebReques

如果您想了解带有文本/ html响应的反应式WebClient GET请求的相关知识,那么本文是一篇不可错过的文章,我们将对html响应头进行全面详尽的解释,并且为您提供关于C# HttpWebRequest和WebClient的区别 通过WebClient/HttpWebRequest实现http的post/get方法、html – 响应式Web设计中的表、HTML中Get请求和Post请求的区别_html/css_WEB-ITnose、HTML响应式布局原则_html/css_WEB-ITnose的有价值的信息。

本文目录一览:

带有文本/ html响应的反应式WebClient GET请求(html响应头)

带有文本/ html响应的反应式WebClient GET请求(html响应头)

目前,我在使用新的Spring 5 WebClient时遇到问题,需要一些帮助来解决它。问题是:

我请求一些返回json响应的URL,其内容类型为 text / html; charset = utf-8

但不幸的是,我仍然遇到异常:
org.springframework.web.reactive.function.UnsupportedMediaTypeException:不支持内容类型’text
/ html; charset = utf-8’
。因此,我无法将响应转换为DTO。

对于请求,我使用以下代码:

Flux<SomeDTO> response = WebClient.create("https://someUrl")                .get()                .uri("/someUri").accept(MediaType.APPLICATION_JSON)                .retrieve()                .bodyToFlux(SomeDTO.class);response.subscribe(System.out::println);

顺便说一句,我指向接受标头的类型实际上并不重要,总是返回text / html。那么我如何才能最终转换我的回答?

答案1

小编典典

让服务发送带有"text/html"Content-Type的JSON 是非常不寻常的。

有两种方法可以解决此问题:

  1. 配置Jackson解码器也可以解码 "text/html"内容;查看WebClient.builder().exchangeStrategies(ExchangeStrategies)设置方法
  2. 快速更改“ Content-Type”响应标头

这是第二种解决方案的建议:

WebClient client = WebClient.builder().filter((request, next) -> next.exchange(request)                .map(response -> {                    MyClientHttpResponseDecorator decorated = new                         MyClientHttpResponseDecorator(response);                     return decorated;                })).build();class MyClientHttpResponseDecorator extends ClientHttpResponseDecorator {  private final HttpHeaders httpHeaders;  public MyClientHttpResponseDecorator(ClientHttpResponse delegate) {    super(delegate);    this.httpHeaders = new HttpHeaders(this.getDelegate().getHeaders());    // mutate the content-type header when necessary  }  @Override  public HttpHeaders getHeaders() {    return this.httpHeaders;  }}

请注意,您仅应在该上下文中(对于此主机)使用该客户端。如果可以的话,我强烈建议您尝试修复服务器返回的那种奇怪的内容类型。

C# HttpWebRequest和WebClient的区别 通过WebClient/HttpWebRequest实现http的post/get方法

C# HttpWebRequest和WebClient的区别 通过WebClient/HttpWebRequest实现http的post/get方法

一 HttpWebReques
1,HttpWebRequest是个抽象类,所以无法new的,需要调用HttpWebRequest.Create();
2,其Method指定了请求类型,这里用的GET,还有POST;也可以指定ConentType;
3,其请求的Uri必须是绝对地址;
4,其请求是异步回调方式的,从BeginGetResponse开始,并通过AsyncCallback指定回调方法;
二 WebClient
1,WebClient 方式使用基于事件的异步编程模型,在HTTP响应返回时引发的WebClient回调是在UI线程中调用的,因此可用于更新UI元素的属性,
例如把 HTTP响应中的数据绑定到UI的指定控件上进行显示。HttpWebRequest是基于后台进程运行的,回调不是UI线程,所以不能直接对UI进行操作,通常使用Dispatcher.BeginInvoke()跟界面进行通讯。
 1 //body是要传递的参数,格式"roleId=1&uid=2"
 2 //post的cotentType填写:
 3 //"application/x-www-form-urlencoded"
 4 //soap填写:"text/xml; charset=utf-8"
 5     public static string PostHttp(string url, string body, string contentType)
 6     {
 7         HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
 8 
 9         httpWebRequest.ContentType = contentType;
10         httpWebRequest.Method = "POST";
11         httpWebRequest.Timeout = 20000;
12 
13         byte[] btBodys = Encoding.UTF8.GetBytes(body);
14         httpWebRequest.ContentLength = btBodys.Length;
15         httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);
16 
17         HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
18         StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
19         string responseContent = streamReader.ReadToEnd();
20 
21         httpWebResponse.Close();
22         streamReader.Close();
23         httpWebRequest.Abort();
24         httpWebResponse.Close();
25 
26         return responseContent;
27     }
28 
29 POST方法(httpWebRequest)
POST方法(httpWebRequest)
 1 /// <summary>
 2         /// 通过WebClient类Post数据到远程地址,需要Basic认证;
 3         /// 调用端自己处理异常
 4         /// </summary>
 5         /// <param name="uri"></param>
 6         /// <param name="paramStr">name=张三&age=20</param>
 7         /// <param name="encoding">请先确认目标网页的编码方式</param>
 8         /// <param name="username"></param>
 9         /// <param name="password"></param>
10         /// <returns></returns>
11         public static string Request_WebClient(string uri, string paramStr, Encoding encoding, string username, string password)
12         {
13             if (encoding == null)
14                 encoding = Encoding.UTF8;
15 
16             string result = string.Empty;
17 
18             WebClient wc = new WebClient();
19 
20             // 采取POST方式必须加的Header
21             wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
22 
23             byte[] postData = encoding.GetBytes(paramStr);
24 
25             if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
26             {
27                 wc.Credentials = GetCredentialCache(uri, username, password);
28                 wc.Headers.Add("Authorization", GetAuthorization(username, password));
29             }
30 
31             byte[] responseData = wc.UploadData(uri, "POST", postData); // 得到返回字符流
32             return encoding.GetString(responseData);// 解码                  
33         }
34 
35 POST方法(WebClient)
POST方法(WebClient)
 1 public static string GetHttp(string url, HttpContext httpContext)
 2     {
 3         string queryString = "?";
 4 
 5         foreach (string key in httpContext.Request.QueryString.AllKeys)
 6         {
 7             queryString += key + "=" + httpContext.Request.QueryString[key] + "&";
 8         }
 9 
10         queryString = queryString.Substring(0, queryString.Length - 1);
11 
12         HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url + queryString);
13 
14         httpWebRequest.ContentType = "application/json";
15         httpWebRequest.Method = "GET";
16         httpWebRequest.Timeout = 20000;
17 
18         //byte[] btBodys = Encoding.UTF8.GetBytes(body);
19         //httpWebRequest.ContentLength = btBodys.Length;
20         //httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);
21 
22         HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
23         StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
24         string responseContent = streamReader.ReadToEnd();
25 
26         httpWebResponse.Close();
27         streamReader.Close();
28 
29         return responseContent;
30     }
31 
32 Get方法(HttpWebRequest)
Get方法(HttpWebRequest)
 1 /// <summary>
 2         /// 通过 WebRequest/WebResponse 类访问远程地址并返回结果,需要Basic认证;
 3         /// 调用端自己处理异常
 4         /// </summary>
 5         /// <param name="uri"></param>
 6         /// <param name="timeout">访问超时时间,单位毫秒;如果不设置超时时间,传入0</param>
 7         /// <param name="encoding">如果不知道具体的编码,传入null</param>
 8         /// <param name="username"></param>
 9         /// <param name="password"></param>
10         /// <returns></returns>
11         public static string Request_WebRequest(string uri, int timeout, Encoding encoding, string username, string password)
12         {
13             string result = string.Empty;
14 
15             WebRequest request = WebRequest.Create(new Uri(uri));
16 
17             if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
18             {
19                 request.Credentials = GetCredentialCache(uri, username, password);
20                 request.Headers.Add("Authorization", GetAuthorization(username, password));
21             }
22 
23             if (timeout > 0)
24                 request.Timeout = timeout;
25 
26             WebResponse response = request.GetResponse();
27             Stream stream = response.GetResponseStream();
28             StreamReader sr = encoding == null ? new StreamReader(stream) : new StreamReader(stream, encoding);
29 
30             result = sr.ReadToEnd();
31 
32             sr.Close();
33             stream.Close();
34 
35             return result;
36         }
37 
38         #region # 生成 Http Basic 访问凭证 #
39 
40         private static CredentialCache GetCredentialCache(string uri, string username, string password)
41         {
42             string authorization = string.Format("{0}:{1}", username, password);
43 
44             CredentialCache credCache = new CredentialCache();
45             credCache.Add(new Uri(uri), "Basic", new NetworkCredential(username, password));
46 
47             return credCache;
48         }
49 
50         private static string GetAuthorization(string username, string password)
51         {
52             string authorization = string.Format("{0}:{1}", username, password);
53 
54             return "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(authorization));
55         }
56 
57         #endregion
58 
59 basic验证的WebRequest/WebResponse
basic验证的WebRequest/WebResponse

 

html – 响应式Web设计中的表

html – 响应式Web设计中的表

我遵循了在应用程序中设置表单的典型方式,即使用如下所示的表:
<table>
  <tbody>
    <tr>
      <td>Field</td>
      <td>@Html.TextBox("Field")</td>
    </tr>
    <tr>
      <td>Field 2</td>
      <td>@Html.TextBox("Field2")</td>
    </tr>
  </tbody>
</table>

产生如下格式:

Field    <TextBox>
Field    <TextBox>

大多数移动设计都是这样设计的:

Field
<TextBox>
Field
<TextBox>

这是我需要做的事情,因为我的一些表单太长而无法在移动浏览器中显示.有没有简单的方法来设置它?也许有一种方法可以让每个单元格在一个新行上渲染,这对我有用吗?是否支持跨浏览器?

还是需要重新设计?

谢谢.

解决方法

是的,你可以做这样的事情,删除表格显示为较小的视口:
@media (max-width:40em) {
    table,thead,tbody,tfoot,th,td,tr { display:block; }
    tr + tr { margin-top:1em; }
}

见:css-tricks.com/responsive-data-tables/

HTML中Get请求和Post请求的区别_html/css_WEB-ITnose

HTML中Get请求和Post请求的区别_html/css_WEB-ITnose

       首先如下在html中通过method设置请求方式,而其中的action是设置接受html数据的页面。

<span><form action="WebForm1.aspx" method="post"></form></span>
登录后复制

Get是向服务器发索取数据的请求。

Post是向服务器提交数据的请求。

立即学习“前端免费学习笔记(深入)”;

 

       Get获取信息,它所请求的参数会跟着浏览器地址栏中的URL(解释URL:UniformResource Locator ,在互联网上每个文件都有自己的URL)后进行传递。

例如:http://zhidao.baidu.html?fr=chd&test=1这其中在“?”后面的就是通过URL获得参数的值。而fr和test之间即参数和参数之间使用“&”连接。

       在应用程序中如果使用Get进行传值,就需要使用Request.QueryString[“参数名”]如下为在牛腩中的一个实例:

标题列都是超链接,如图的当鼠标移到到标题为“kkk”,序号为“16”的链接上面时,在网页的左下角会显示一列字,这列字就是下一个要打开的网页的URL,其中“?”后为“?newsid=16”,这个就是URL后的参数和参数值。


       因为我们之后所有的数据都是存在数据库中的,新闻页不例外也是存在数据库中,这个页面的标题列每一个标题都是一个链接都会新打开一个页面显示新闻的内容,但是如何确定单击某个标题后显示相应的相应的新闻内容,就是根据URL中的newid这个参数。

       在标题中设有超链接所以当单击后就会加载新闻内容页(NewsContent.aspx),在NewsContent.aspx中定义变量使用如下的代码获得URL中newsid传来的参数“16”

string newsid = Request.QueryString["newsid"];

       然后在D层中编写方法,按照新闻id号查找新闻,在使用时用定义的字符串变量newsid作为参数,最后显示的页面如下。


       Post请求则是作为http消息的内容发给web服务器,将表单内各个字段与其值放置在放在HTML的Header(消息头)中一起传送到ACTION属性所指的URL地址,我们是看不到这个过程的。在指定的URL中一般使用Request.Form["参数名"]或者Request.Form.Get("参数名")获得值。

小结

       Get请求的方法因为回家数据放在URL后面,所以相对不安全,而且能够携带的数据大小是收到限制的。而Post则不受这样的显示,在使用时要根据实际情况选择合适的方法!



HTML响应式布局原则_html/css_WEB-ITnose

HTML响应式布局原则_html/css_WEB-ITnose

  响应式网页设计是针对多屏幕问题的一个很好的解决方案,但从印刷的视角来看有点困难。没有固定的页面尺寸,没有毫米或英寸,没有任何的物理限制,无 从下手。为了desktop和mobile单独使用像素设计的方法也成为了过去,因为越来越多的设备都可以打开网站。因此,我们需要弄清楚响应式网页设计 的一些基本原则,接受流体网页,而不是与之相抗。为了让它保持简单,我们将着眼于布局(是的,响应式比它更复杂,如果你想了解更多,这是一个很好的开端。)


响应式 vs 自适应网页设计


       它们看起来似乎是相同的,但事实并非如此。这两种方法相辅相成,并没有说哪个是正确的那个是错误的,内容决定一切。

立即学习“前端免费学习笔记(深入)”;


内容流动

       随着屏幕尺寸变小,内容将会占据更多的垂直空间,而下方的内容就会被接着往下推,这就是所谓的流动。如果你是使用像素和磅来进行设计的,这可能会有点棘手,但是当你习惯了之后,就会变得很有意义了。

相对单位

       画布大小可以是desktop、mobile或是它们之间的任何尺寸。像素密度也可以有所不同,所以我们需要灵活的、在各种屏幕上都可以使用的单位。这就是相对单位(如百分比)派上用场的时候了。所以设置50%的宽度也就意味着它会占据屏幕(或视图,即打开的浏览器窗口的尺寸)的一半。

断点

       断点允许布局在预定义的点改变。例如:desktop屏幕上有3列,但是在mobile上只有一列。大多数CSS属性可以根据断点改变。通常你会根据具体的内容来设置断点。如果一个句子超过了屏幕长度,你可能就需要为其添加一个断点。但是使用断点是需要谨慎??当它很难理解什么内容会影响什么内容的时候,它可能会迅速地导致混乱。

最大值和最小值

       有时候,如果内容占据了屏幕的整个宽度是很好的,比如在移动设备上。但是如果是在电视屏幕上,相同的内容,占据了你的屏幕整个的宽度,通常就意义不大了。这就是Min/Max值发挥作用的时候了。比如说,设置width为100%,然后max-width是1000px,那么内容会填满屏幕,但是不会超过1000px。


嵌套对象

       还记得相对位置吗?让很多元素的位置依赖于其它元素来定位是很难控制好的,因此使用容器来包裹元素可以让它更易理解,也更整洁。这就是静态单位(比如像素)发挥作用的时候了。对于你不想要模块化的内容(比如logo或按钮),它们是有用的。

Mobile优先 还是Desktop优先

       从技术上讲,如果一个项目是从一个较小的屏幕开始,变成较大的屏幕(mobile优先),还是反过来(desktop优先),并没有太大的差别。然 而它还是增加了额外的限制,可以帮助你决定是否从mobile优先开始。通常大家在一开始的时候都会两端一起写,所以,还是看看哪个运行起来更好。

网页字体 vs 系统字体

       希望你的网站上有很酷的Futura或Didot字体吗?可以使用网页字体!虽然它们看起来非常棒,但是记住字体放得越多,你加载页面的时间也会越长。在另一方面,加载系统字体确是快如闪电,但当用户本地没有这套字体时,它就会返回默认的字体。

位图 vs 矢量图

       你是否想过在图标上添加很多的细节和花哨的效果?如果想过的话,使用位图比较合适。如果没有,可以考虑使用矢量图。对于位图,使用的是jpg、png或gif格 式的图像,而对于矢量图,最好的选择是SVG或图标字体。每个都有对应的优势和缺点。但是图片的大小也需要重视??网页上的图片必须经过优化。另一个方 面,矢量图通常比较小,但是一些旧版的浏览器不支持。此外,如果它有很多曲线的话,它也可能会比位图要重。所以,慎重选择。



关于带有文本/ html响应的反应式WebClient GET请求html响应头的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于C# HttpWebRequest和WebClient的区别 通过WebClient/HttpWebRequest实现http的post/get方法、html – 响应式Web设计中的表、HTML中Get请求和Post请求的区别_html/css_WEB-ITnose、HTML响应式布局原则_html/css_WEB-ITnose等相关知识的信息别忘了在本站进行查找喔。

本文标签: