如何将表单提交到同一页面并使用GET参数?
JSF页面内容:
<f:metadata>
<f:viewParam name="item1" value="#{bean.item1}"/>
<f:viewParam name="item2" value="#{bean.item2}"/>
</f:metadata>
...
<h:form>
<h:inputText value="#{bean.item1}"/>
<h:inputText value="#{bean.item2}"/>
<h:button value="Submit" >
<f:param name="item1" value="#{bean.item1}"/>
<f:param name="item2" value="#{bean.item2}"/>
</h:button>
</h:form>
Run Code Online (Sandbox Code Playgroud)
如果我请求页面:form.jsf?item1 = foo&item2 = bar,它将填充文本字段,但表单提交到自身似乎不起作用.
我已经搜索了一段时间,但我找不到明确的答案.我正在尝试登录网站. https://hrlink.healthnet.com/ 此网站重定向到不合作的登录页面.我必须将我的登录凭据发布到重定向的URL.
我正在尝试用Java编写代码,但我不明白如何从响应中获取URL.它可能看起来有点乱,但我在测试的时候就是这样.
HttpGet httpget = new HttpGet("https://hrlink.healthnet.com/");
HttpResponse response = httpclient.execute(httpget);HttpEntity entity = response.getEntity();
String redirectURL = "";
for(org.apache.http.Header header : response.getHeaders("Location")) {
redirectURL += "Location: " + header.getValue()) + "\r\n";
}
InputStream is;
is = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
String result = sb.toString();
Run Code Online (Sandbox Code Playgroud)
我知道我被重定向,因为我的结果字符串显示的是实际的登录页面,但我无法获得新的URL.
在FireFox中我使用的是TamperData.当我导航到这个网站时https://hrlink.healthnet.com/我有一个GET,其中包含302 - Found和Login Page的位置.然后另一个GET到实际的登录页面
非常感谢任何帮助,谢谢.
我使用以下代码从Web服务器请求xml:
HttpClient httpclient = new DefaultHttpClient()
try
{
HttpGet httpget = new HttpGet("http://63.255.173.242/get_public_tbl.cgi?A=1");
ResponseHandler responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpget, responseHandler);
System.out.println(responseBody);
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
httpclient.getConnectionManager().shutdown();
}
当我调用httpclient.execute(httpget,responseHandler)时,我得到一个clientProtocolException.url在Web浏览器中工作正常,它返回xml,浏览器显示它.
任何想法为什么我会得到一个clientProtocolException但浏览器处理它就好了?
编辑1:
查看协议异常,详细消息是:"服务器无法响应有效的HTTP响应".我无法更改我正在访问的Web服务器.有没有办法忽略这个并只是访问响应?
编辑2:
我发现服务器没有发回完整的标头.有没有办法访问响应的内容,即使返回一个损坏的标题?
编辑3:我编辑的IP地址是我正在打的真实IP地址.任何帮助将非常感激.
首先,我读了一些相关的帖子:
但我仍然认为我应该在这里提出我的问题和想法.REST API中的HTTP状态代码应该是什么?使用GET到QUERY"未准备好,稍后再试"资源?例如,客户端尝试通过对此URL进行HTTP GET来查询将来发生的所有本地新闻(!):http://example.com/news?city = chicago& date = 2099-12-31那么服务器应该回复什么?
这些是我考虑的http状态代码,它们的rfc定义以及为什么我不完全满意:
3xx重定向.注释:不是一个选项,因为没有其他链接可以重定向到.
503服务不可用:由于服务器临时过载或维护,服务器当前无法处理请求.这意味着这是一个暂时的条件,经过一段时间的延迟后会得到缓解.如果已知,则可以在Retry-After报头中指示延迟的长度.注释:需要重试行为,但从语义上讲,情况根本不是服务器的错误,因此所有5xx看起来都很奇怪.
4xx客户端错误.评论:看起来很有希望 见下文.
413请求实体太大:服务器拒绝处理请求,因为请求实体大于服务器愿意或能够处理的请求实体....如果条件是临时的,服务器应该包括一个Retry-After头字段,以指示它是临时的,以及客户端可以再次尝试的时间.注释:需要重试行为,但"实体太大"部分有些误导.
417期望失败:此服务器无法满足Expect请求标头字段(请参阅第14.20节)中给出的期望.注释:所以它应该是由Expect请求标头引起的,不适用于我的情况.
406 Not Acceptable:资源...根据请求中发送的accept头不可接受.注释:所以它是由Accept request-header引起的,不适用于我的情况.
409冲突:由于与资源的当前状态发生冲突,无法完成请求.此代码仅在预期用户可能能够解决冲突并重新提交请求的情况下才允许....响应PUT请求最有可能发生冲突.评论:这个很接近.虽然我的情况不是关于PUT,实际上并不是由冲突造成的.
404 Not Found:服务器未找到与Request-URI匹配的任何内容.评论:从技术上讲,我的网址路径(http://example.com/news)存在,它是导致问题的参数.在这种情况下,返回空集合而不是404,可能更合适.
403 Forbidden:服务器理解请求,但拒绝履行请求.授权无效,请求不应重复.评论:通常这应该用于任何受限制的资源?
400错误请求:由于语法格式错误,服务器无法理解请求.客户端不应该在没有修改的情况下重复请求.评论:在我的案例中并非如此.我的服务器理解请求,它的语法很好,只有意思不好.
2xx成功.评论:如果4xx不起作用,2xx怎么样?见下文.
200好的.评论:很好.那么我应该在响应体中包含什么呢?null或[]或{}或{"date":"2099-12-31","content_list":null}或者......哪一个更直观?另一方面,我更喜欢一种方法,以明确区分未成年人"未来新闻"错误与更常见的"所有查询标准都很好,这一天没有新闻"的情况.
202 Accepted:已接受请求进行处理,但处理尚未完成.该请求最终可能会或可能不会被采取行动.注释:假设我们可以在GET请求中使用202,则可以接受.然后参考200评论.
204 No Content:服务器已完成请求,但不需要返回实体.注释:假设我们可以在GET请求中使用204,则可以接受.只是不知道这是否优于202或200.
更多关于2xx: …
我正在使用谷歌凌空在Android中进行网络连接.我将发出一个http GET请求,并需要返回一个响应头值.我在堆栈溢出时找到了一些访问头字段的答案,但不知道如何将它返回到我的调用点.请看看我的代码,我在其中放了四个数字来解释我的问题.
在(1)我可以打印出我需要的价值.我试图将它保存在类属性(2)中,并且IDE中没有错误.如果我想从那里(3)返回它,我在(4)得到一个NullPointerException.也许它在那之前是一个读写问题.那么我怎样才能得到(1)到(4)的值?非常感谢!
public class Login {
String phpsessid = null;
public Login() {}
public String getSessionId(Context context) {
RequestQueue queue = Volley.newRequestQueue(context);
StringRequest sr = new StringRequest(Request.Method.GET, "any url",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
System.out.println(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
System.out.println(response.headers.get("Set-Cookie")); (1)
phpsessid = response.headers.get("Set-Cookie"); (2)
return super.parseNetworkResponse(response);
}
};
queue.add(sr);
return phpsessid; (3)
}
Run Code Online (Sandbox Code Playgroud)
}
在主要:
Login login = …Run Code Online (Sandbox Code Playgroud) android http-get http-headers android-networking android-volley
我已经阅读了一些相关的问题,但不幸的是他们没有回答我的问题,因为我有具体的要求.
也许这是一个愚蠢的问题,但我如何使用httpURLConnection和http-header"Accept"请求(GET)JSON响应?
我在文档中找到了一个片段,但我不知道怎么做.
Accept = "Accept" ":" #( media-range [ accept-params ] )
Run Code Online (Sandbox Code Playgroud) 当我转到/blaNodeJS 应用程序中的页面时,控制台会打印出来
GET /bla - - ms - -
Run Code Online (Sandbox Code Playgroud)
在字(以便于谷歌搜索)dash dash ms dash dash。
这是什么意思?
我正在使用node.js Restify。
我有一个 HTTP GET 请求,如下所示;
http://127.0.0.1//read_val?XXX=123&YYY=456&ZZZ=789
在我的处理函数中,要检索URL参数,相关代码将是这样的;
var api_get_func = function (app, url_path) {
function respond(req, res, next) {
var XXX= req.query.XXX;
var YYY = req.query.YYY;
var ZZZ = req.query.ZZZ;
//SQL query ...
return next();
}
app.get(url_path, respond);
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我有一个像下面这样的 HTTP GET 函数怎么办?
http://127.0.0.1//read_val?XXX=123&YYY=456
ZZZURL 中未提供该参数。如何修改代码以便ZZZ使用默认值,例如111?
我需要自动化其余的 API。API 受 Spring 安全保护。
以下是验证代码:
Response response = given().auth()
.form(userName, password, FormAuthConfig.springSecurity().withLoggingEnabled(new LogConfig(captor, true)))
.post("/home/xyz.html");
Assert.assertTrue("Error occurs", response.statusCode() == 302);
if (response.statusCode() == 302) {
Cookie cookie = response.getDetailedCookie("JSESSIONID");
result.actualFieldValue = "User Authenticated: Session ID ->" + cookie.getValue();
System.out.println("Cookie set : "+cookie.getValue());
apiTestSessionID = cookie.getValue();
}
Run Code Online (Sandbox Code Playgroud)
用户登录并返回 302 状态,表示重定向。我找到了 cookie 并设置了一些全局变量。
现在,我使用请求设置 cookie:
RequestSpecification reqSpecification = new RequestSpecBuilder().addCookie("JSESSIONID", AbstractBaseClass.apiTestSessionID).build();
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("cstmrID", "000N0961");
parameters.put("pageNumber", "1");
parameters.put("pageSize", "10");
parameters.put("sortColumnName", "FIELD_NM");
parameters.put("sortDir", "asc");
parameters.put("filterColumnName1", "");
parameters.put("filterColumnName2", …Run Code Online (Sandbox Code Playgroud) 我正在使用静态 URL 查询数据服务。服务器(也是节点)发送大约 955k 的 JSON 数据。
1)我可以CURL数据以获得正确的结果,即它通过JSON.parse()。
2)从节点,我可以 exec("curl ..."); 并且也得到正确的结果。
3)同时使用Request和Axios,我得到了大约600k的数据。精确的字符数每次都会发生变化。
4)使用 Axios,我将数据流式传输到文件中,并获得许多“数据”事件,并将它们连接到文件中。这也是不正确的。
5)它可以在较小的有效载荷下正常工作。
专家联合起来!!我任由你摆布。我将祈求并赞扬并感谢您的帮助。
如果没有您的帮助,我将拥有一个使用 NodeJS 中的 CURL 的生产应用程序,邪恶将会获胜。
此致, TQ White II
更新:有人要求我提供代码片段。这里是:
const datGetterWORKS_FOR_SMALL_DATA_LOADS=(element, next)=>{
const localCallback=sendToTransformerCallback(element, next);
const {url, headers}=networkSpecs.connection;
axios.get(url + element.urlSegment, {
method: 'get',
responseType: 'json',
headers: headers,
maxContentLength: 6000000,
})
.then(function (response) {
localCallback('', response, response.data)
});
}
Run Code Online (Sandbox Code Playgroud)
请注意,这是给 require('async').each() 进程的。
http-get ×10
java ×3
node.js ×3
android ×2
httpclient ×2
httpresponse ×2
ajax ×1
axios ×1
console ×1
cookies ×1
forms ×1
http ×1
http-headers ×1
http-post ×1
javascript ×1
jsf ×1
jsf-2 ×1
json ×1
rest ×1
rest-assured ×1
restify ×1
viewparams ×1