I wanna intercept all of http request for adding header to my request and build response. I used all algorithm and libraries ( okHttp, HttpUrlConnection) but no hope :(
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
String urlString = request.getUrl().toString();
if (Build.VERSION.SDK_INT >= 21) {
try {
URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestProperty(Constants.KEY_HEADER, Constants.VALUE_KEY_HEADER);
if (request.getMethod().equals("POST")) {
urlConnection = getPostData(urlConnection, request);
}
InputStream in;
int statusCode = urlConnection.getResponseCode();
if (statusCode == 400 || statusCode == 401 || statusCode == 404) {
in = urlConnection.getErrorStream();
} else {
in = urlConnection.getInputStream();
}
String typeMime = urlConnection.getHeaderField("Content-Type");
if (typeMime == null){
typeMime = "text/html";
}
if (urlString.equals("fontawesome-webfont.woff")) {
typeMime = "application/font-woff";
}
if (typeMime.contains("text/html")) {
typeMime = "text/html";
} else if (typeMime == null || typeMime.contains("application/font-woff")) {
typeMime = "application/font-woff";
}
return new WebResourceResponse(typeMime, "utf-8", in);
} catch (IOException ioe) {
Log.d(Constants.LOG_TAG, "IOException : " + ioe.getMessage());
return null;
}
} else {
return null;
}
private HttpURLConnection getPostData(HttpURLConnection urlConnection, WebResourceRequest request) throws IOException {
urlConnection.setReadTimeout(10000);
urlConnection.setConnectTimeout(15000);
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
for (String key : request.getRequestHeaders().keySet()) {
String valueKey = request.getRequestHeaders().get(key);
Log.d("key is = ", "" + key + " and value = " + valueKey);
urlConnection.setRequestProperty(key, valueKey);
}
urlConnection.setRequestProperty(URLCache.KEY_X_CSRF_Token, URLCache.VALUE_X_CSRF_Token);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("signin[username]", "dfgdfg"));
params.add(new BasicNameValuePair("signin[password]", "dfgdfg"));
OutputStream os = urlConnection.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "utf-8"));
writer.write(getQuery(params));
writer.flush();
writer.close();
os.close();
urlConnection.connect();
return urlConnection;
}
For "GET" Method its work fine but not method "POST" in forum action
Related
I am trying to create a PDF from a server-side controller (report) (ireport) with ajax (and so on), and try to return the data to pdfwriter, servletoutputstream, and httpservletresponse. (I do not know exactly what I'm doing, but I'm doing it this way).
The original purpose was to send a server-side pdf file to the client, find the printer and print without a preview window.
Among them, I wrote 'application / pdf' on the server side and 'datetype: text' on the client side ajax (there is an error if I do not use ajax datatype: text)
If you print the results to the console, they will only be listed as unknown code.
Currently I am trying to put it into an iframe frame.
Question!
1. What should I do to use the text string sent to server -> client as pdf or script code?
(I have already asked you two weeks ago)
2. How do I send a pdf to server -> client? I would like to apply it to the screen by expressing it directly in code instead of downloading it. To print out.
ENG)>
// I used ajax only, because I dont know any other way
$.ajax({
url : "url",
data : JSON.stringify(data),
dataType : "text",
type: "POST",
contentType: 'application/json; charset=utf-8',
async : false,
success: function(result){
// I want to view PDF contents and directly print to PDF.
}
})
public Params createIbExItemLabelReport(HttpServletRequest resq, HttpSession session, Params inParams, HttpServletResponse resp) throws Exception{
Params outParams = ParamsFactory.createParams(inParams);
resp.setHeader("Cache-Control", "no-cache");
resp.setHeader("Pragma", "no-cache");
resp.setHeader("Expires", "0");
List<DataRow> list = new ArrayList<DataRow>();
String reportCd = "15";
String fileName = "ibExItemLabel"+reportCd+"Report";
String nullJpgFile = "";
int flag = 0;
int nullCheck = 0;
for(DataRow dr : inParams.getDataTable("dt_data")){
String imgName = "c:\\WMS\\LABEL\\FIAC021_" +reportCd + ".jpg";
File f = new File(imgName);
if (!f.isFile()) {
flag = 1;
if(nullCheck != 0){
nullJpgFile += ", ";
}
nullJpgFile += "FIAC021";
nullCheck++;
continue;
}
String bacodeCd = "FIAC02120180416001";
dr.setParam("imgName", imgName);
dr.setParam("bacodeCd", bacodeCd);
list.add(dr);
}
if(flag == 1){
outParams.setParam("ERROR_FILE", "제품코드 ["+nullJpgFile+"]의 라벨 사이즈" + reportCd + "인 파일이 존재하지않습니다.");
return outParams;
}
String appPath = session.getServletContext().getRealPath("/");
String pdfPath = null;
List<DataRow> list2 = new ArrayList<DataRow>();
for(int i = 0; i < list.size(); i++){
for(int j = 0; j < list.get(i).getInt("printQty"); j++){
list2.add(list.get(i));
}
}
Report report = new Report();
pdfPath = report.reportToPdf(session, list2, fileName);
outParams.setParam("fileName", pdfPath);
System.out.println("Found! FileName is ' : "+ pdfPath);
pdfPath = appPath + pdfPath;
pdfPath = pdfPath.replace("//", "/");
ServletOutputStream servletOutput = resp.getOutputStream();
PdfWriter pdfWriter = null;
StringBuffer pdfJs = null;
ByteArrayOutputStream pdfOutput = null;
InputStream pdfInput = null;
PdfReader pdfReader = null;
PdfStamper pdfStamper = null;
pdfOutput = convertPDFToByteArrayOutputStream(pdfPath);
int printCopy = 1;
if (printCopy == 0) {
printCopy = 1;
}
if (printCopy > 1) {
PdfCopyFields pdfPrintCopy = new PdfCopyFields(pdfOutput);
for (int i = 0; i < printCopy; i++) {
pdfPrintCopy.addDocument(new PdfReader(outputToInputStream(pdfOutput)));
}
pdfPrintCopy.close();
}
pdfInput = outputToInputStream(pdfOutput);
pdfReader = new PdfReader(pdfInput);
pdfStamper = new PdfStamper(pdfReader, servletOutput);
pdfWriter = pdfStamper.getWriter();
String printerNm = "SINDOH D410 Series PCL";
pdfWriter.setViewerPreferences(PdfWriter.HideMenubar | PdfWriter.HideToolbar | PdfWriter.HideWindowUI);
pdfJs = new StringBuffer();
pdfJs.append("var param=this.getPrintParams();\r");
pdfJs.append("param.printerName=\"").append(printerNm).append("\";\r");
pdfJs.append("param.interactive=param.constants.interactionLevel.silent;\r");
pdfJs.append("param.pageHandling=param.constants.handling.shrink;\r");
pdfJs.append("this.print(param);\r");
pdfJs.append("this.closeDoc();");
pdfWriter.addJavaScript(pdfJs.toString(), false);
servletOutput.flush();
Log.debug("servletOutput " );
if (pdfInput != null) {
try {
pdfInput.close();
} catch (Exception e) {
}
pdfInput = null;
}
if (pdfOutput != null) {
try {
pdfOutput.close();
} catch (Exception e) {
}
pdfOutput = null;
}
if (pdfReader != null) {
pdfReader.close();
pdfReader = null;
}
pdfWriter = null;
try {
if (pdfStamper != null) {
pdfStamper.close();
pdfStamper = null;
}
} catch (Exception e) {
}
resp.setHeader("Content-Disposition", "inline; filename="+pdfPath);
resp.setHeader("Content-Type", "application/pdf; charset=UTF-8");
resp.setCharacterEncoding("UTF-8");
Log.debug("before outParams " );
return outParams;
}
private InputStream outputToInputStream(ByteArrayOutputStream source) {
return new ByteArrayInputStream(source.toByteArray());
}
private static ByteArrayOutputStream convertPDFToByteArrayOutputStream(String FilePath) {
InputStream inputStream = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
inputStream = new FileInputStream(new File(FilePath));
byte[] buffer = new byte[1024];
baos = new ByteArrayOutputStream();
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
baos.write(buffer, 0, bytesRead);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return baos;
}
please answer my question
i'm using XMLHttpRequest to send a variable from the js file to java file in the same project.
My problem and my question is: how i know my URL ?
Here is my code from js file
xhttp = new XMLHttpRequest();
var handlerFunction = getReadyStateHandler(xhttp, getValue);
xhttp.onreadystatechange = handlerFunction;
xhttp.open("POST",/* Location of my java file */,true);
xhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhttp.send(identMsg);
function getValue (body) {
var valueBody = body.getElementByTagName("body")[0];
}
function getReadyStateHandler(xhttp, responseXmlHandler) {
return function(){
if (xhttp.readyState == 4) {
if(xhttp.status == 200) {
responseXmlHandler(xhttp.responseXML);
} else {alert("Http error: " +xhttp.status);}
}
}
}
and the java code
public void doPost (HttpServletRequest xhttp, HttpServletResponse res) throws IOException {
String body = null;
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = null;
try {
InputStream inputStream = xhttp.getInputStream();
if (inputStream != null) {
bufferedReader = xhttp.getReader();
char[] charBuffer = new char[128];
int bytesRead = -1;
while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
stringBuilder.append(charBuffer,0, bytesRead);
}
} else {
stringBuilder.append("");
}
} catch(IOException ex) {
throw ex;
} finally {
if(bufferedReader != null) {
try {
bufferedReader.close();
}catch (IOException ex2){
throw ex2;
}
}
}
body = stringBuilder.toString();
res.setContentType("application/xml");
res.getWriter().write(body);
}
what is missing?
EDIT: I need to get URL in the js side.
You can have the URL in js with document.location.href
This line
dojs("jQuery('#result').html('"+encoded+"')");
is not working and not displaying encoded String on WebView. Other codes are working without problem.
If I replace
dojs("jQuery('#result').html('"+encoded+"')");
line with
Toast.makeText(this, encoded, Toast.LENGTH_SHORT).show();
it displays encoded String on Toast.
public void dojs(String command) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript(command, null);
}
else {
webView.loadUrl("javascript:" + command);
}
}
public String getRealPathFromURI(Uri uri) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
return cursor.getString(idx);
}
#Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1001 && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri selectedImage = data.getData();
File sfile = new File(getRealPathFromURI(selectedImage));
int file_size = Integer.parseInt(String.valueOf(sfile.length()/1024));
if (file_size>200) {
dojs("jQuery('#result').html('File size is more than 200 kb')");
} else {
ContentResolver cR = getApplicationContext().getContentResolver();
MimeTypeMap mime = MimeTypeMap.getSingleton();
String type = mime.getExtensionFromMimeType(cR.getType(selectedImage));
if (type=="jpeg" || type=="jpg" || type=="png") {
try {
InputStream inputStream = new FileInputStream(sfile);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
if (type=="png") {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
} else {
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
}
byte[] byteArray = byteArrayOutputStream .toByteArray();
String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);
dojs("jQuery('#result').html('"+encoded+"')");
} catch (FileNotFoundException e) {
dojs("jQuery('#result').html('"+e.getMessage()+"')");
} catch (IOException e) {
dojs("jQuery('#result').html('"+e.getMessage()+"')");
}
} else {
dojs("jQuery('#result').html('png or jpg is accepted')");
}
}
}
}
There is not any error on logcat. please advice.
I have used a CircleImageView using the 'de.hdodenhof:circleimageview:2.0.0' library.
code:
#Override
public boolean onMenuItemClick(MenuItem item){
switch(item.getItemId()){
case R.id.slot1:
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (cameraIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
ex.printStackTrace();
}
// Continue only if the File was successfully created
if (photoFile != null) {
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
startActivityForResult(cameraIntent, CAMERA_IMAGE_REQUEST);
}
}
return true;
case R.id.slot2:
Intent i = new Intent();
i.setType("image/*");
i.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(i, "Select Picture"), PICK_IMAGE_REQUEST);
return true;
default:
return true;
}
}
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "Widget_profile_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, // prefix
".jpg", // suffix
storageDir // directory
);
// Save a file: path for use with ACTION_VIEW intents
photoPath = "file:" + image.getAbsolutePath();
return image;
}
and in the onActivityResult() method:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
Bitmap photo = BitmapFactory.decodeFile(photoPath);
profile = (ImageView)findViewById(R.id.profile_image);
profile.setImageBitmap(photo);
} else if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri uri = data.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
profile = (ImageView) findViewById(R.id.profile_image);
profile.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
i have created a menu option to select between Gallery and Camera where the Gallery seems to work perfectly, but Camera option doesn't set any image.
public void setImage(View view){
PopupMenu popupMenu = new PopupMenu(MainActivity.this, view);
popupMenu.setOnMenuItemClickListener(this);
popupMenu.getMenu().add(1, R.id.slot1, 1, "Camera");
popupMenu.getMenu().add(1,R.id.slot2,2,"Gallery");
popupMenu.show();
}
Could someone please help me with this?
I'm totally new in Webtrends, I have read that The SmartSource Data collector JavaScript Tag, could be inserted from Java or HTML. does anyone know how to inser it from Java, I found the below class, is this class does the job? please provide some samples. Thanks in advance
public class DC {
public DC() {
super();
}
public String post_url(String connUrl, Map<String, String> bodyref) {
String response = "";
String responseCode = "";
try {
HttpURLConnection conn = null;
// construct data
String data = "";
Iterator<String> i = bodyref.keySet().iterator();
boolean ampersand = false;
while (i.hasNext()) {
if (ampersand) {
data += "&";
} else {
ampersand = true;
}
String b = i.next();
data += b + "=" + bodyref.get(b);
}
System.out.println();
System.out.println("[Request]");
System.out.println("(Url)");
System.out.println(connUrl);
System.out.println("(Body)");
System.out.println(data);
// send data
URL url = new URL(connUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setUseCaches(false);
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
try {
// get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
response += line;
response += "\n";
}
rd.close();
} catch (IOException e1) {
if (conn != null) {
// get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
String line;
while ((line = rd.readLine()) != null) {
response += line;
response += "\n";
}
}
}
System.out.println();
System.out.println("[Response]");
System.out.println("(Status)");
System.out.printf("%s %s\n", conn.getResponseCode(), conn.getResponseMessage());
System.out.println("(Message)");
System.out.println(conn.getResponseMessage());
System.out.println("(Body)");
System.out.println(response);
System.out.flush();
wr.close();
} catch (Exception e) {
System.out.println();
System.out.println("[Response]");
System.out.println("(Status)");
System.out.println(e.toString());
System.out.println("(Message)");
System.out.println(e.getMessage());
System.out.flush();
}
return response;
}
public static void main(String[] args) {
DC dc = new DC();
// customer-specific DCSID
String dcsid = "dcslbiart00000gwngvpqkrcn_2u3z";
// base portion of DC API url
String base_url = "http://dc.webtrends.com/v1/" + dcsid;
// post body
Map<String, String> body1 = new HashMap();
// post query string
String querystring = "";
// compose urls
String id_url = base_url + "/ids.svc" + querystring;
String event_url = base_url + "/events.svc" + querystring;
// get visitor identifier
String id = dc.post_url(id_url, body1);
// post body
Map<String, String> body = new HashMap();
// initialize post body
body.put("dcsuri", "/MyJavaTest");
body.put("dcssip", "localhost");
body.put("WT.ti", "MyJavaTest");
body.put("WT.co_f", id);
body.put("dcsverbose", "true");
// submit event data
dc.post_url(event_url, body);
}