The remote server returned an error: (302) Found.
报302错误的原因:请求的路径存在重定向。
但是我这个方法依然解决不了这个问题,于是我怀疑对方的跳转方式是否有问题,
我怀疑对方是不是用的JAVA的重定向方法是否有问题
JAVA的两种重定向方法
//1.调用HttpServletRequest的getRequestDispatcher()方法,调用时需要传入转发的地址;
RequestDispatcher requestDispatcher=request.getRequestDispatcher(path);
//2.调用HttpServletRequest的forward(request,response)方法进行请求的转发;
requestDispatcher.forward(request,response);
转发过程:客户端首先发送一个请求到服务器,服务器匹配Servlet,并指定执行。当这个Servlet执行完后,它要调用getRequestDispacther()方法,把请求转发给指定的Servlet_list.jsp,整个流程都是在服务端完成的,而且是在同一个请求里面完成的,因此Servlet和jsp共享同一个request,在Servlet里面放的所有东西,在student_list.jsp中都能取出来。因此,student_list.jsp能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端,整个过程是一个请求,一个响应。
重定向过程:客户端发送一个请求到服务器端,服务器匹配Servlet,这都和请求转发一样。Servlet处理完之后调用了sendRedirect()这个方法,这个方法是response方法。所以,当这个Servlet处理完后,看到response.sendRedirect()方法,立即向客户端返回个响应,响应行告诉客户端你必须再重新发送一个请求,去访问student_list.jsp,紧接着客户端收到这个请求后,立刻发出一个新的请求,去请求student_list.jsp,在这两个请求互不干扰、相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。因此,在sendRedirect()里面是两个请求,两个响应。
总结:
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
这里重定向之后我就获取不了request中的参数了,按理来说我也应该获取到新的request里的内容。但是并没有得到。
** 若有大佬路过还请留言解惑**
我的方法走到HttpWebResponse response = (HttpWebResponse)request.GetResponse();这里就直接异常了。报的就是 The remote server returned an error: (302) Found.。
我使用的方法(C# .net Core 3.1)
public static string HttpGet(string Url, Dictionary<String, object> parames, string cookie = null, bool isencode = false)
{
String postDataStr = buildParamStr(parames);
if (isencode)
{
//postDataStr = System.Web.HttpUtility.UrlEncode(postDataStr);
}
string serviceAddress = Url + "?" + postDataStr;
try
{
HttpWebRequest request =
(HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "GET";//GET请求的方式
request.ContentType = "application/x-www-form-urlencoded";//编码格式以及请求类型,这行代码很关键,不设置ContentType将可能导致后台参数获取不到值
if (serviceAddress.ToLower().Trim().StartsWith("https"))
{//证书问题
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
//request.KeepAlive = false;
//request.ProtocolVersion = HttpVersion.Version10;
}
request.Credentials = CredentialCache.DefaultCredentials;
request.AllowAutoRedirect = true;//允许请求重定向
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream,
Encoding.UTF8);
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;//返回链接字符串
}
catch (Exception ex)
{
return "";
}
}