Commit 578723b1 authored by nargessalehi98's avatar nargessalehi98

Pre-end

parent aefab250
File added
No preview for this file type
File added
No preview for this file type
No preview for this file type
File added
File added
File added
File added
File added
File added
File added
File added
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
File added
No preview for this file type
File added
File added
url: http://yahoo.com | method: GET | headers: null: null |
bodyredirect
headers{X-Frame-Options=[SAMEORIGIN], null=[HTTP/1.1 301 Moved Permanently], Cache-Control=[no-store, no-cache], Server=[ATS], Content-Security-Policy=[frame-ancestors 'self' https://*.techcrunch.com https://*.yahoo.com https://*.aol.com https://*.huffingtonpost.com https://*.oath.com https://*.verizonmedia.com https://*.publishing.oath.com; sandbox allow-forms allow-same-origin allow-scripts allow-popups allow-popups-to-escape-sandbox allow-presentation; report-uri https://csp.yahoo.com/beacon/csp?src=ats&site=frontpage&region=US&lang=en-US&device=featurephone&yrid=&partner=;], Connection=[keep-alive], Content-Length=[8], Date=[Fri, 12 Jun 2020 09:04:02 GMT], Content-Language=[en], Location=[https://us.yahoo.com/], Content-Type=[text/html]}
takedTime3.336
statusCode301
statusMassageMoved Permanently
byteCount8
\ No newline at end of file
import com.sun.net.httpserver.Headers;
import java.io.*;
import java.util.Scanner;
/**
* Manage requests files
* @author Narges Salehi
*/
public class Files {
//creat 2 path for response and requests
static final String PATH1 = "./requests/";
static final String PATH2 = "./response/";
//creat static variable to keep value of requests
static String Body; //body of massage
static String byteCount; //byte of request
static String takedTime; //time of request
static String statusCode; //status code of request
static String statusMassage; //status massage of request
static String HeadersOfMassage; //Headers of request
/*
* static constructor to creat directories
*/
static {
File directory1 = new File(PATH1);
directory1.mkdirs();//create directory for request
File directory2 = new File(PATH2);
directory2.mkdirs(); //create directory for response
}
/**
* Creat new directory by user request
* @param name of directory
*/
public static void makeDirectory(String name) {
//creat a path in root folder
final String PATH = "./requests/" + name;
File directory = new File(PATH);// new file in given path
directory.mkdirs(); //create directory
}
/**
* Write response if asked for
* @param content of response
* @param fileName name of file
* @throws IOException
*/
public static void fileWriterResponse(String content, String fileName) throws IOException {
OutputStream out = new FileOutputStream(PATH2 + fileName + ".txt/"); //create a stream
out.write(content.getBytes()); //write content on file
out.flush();
}
/**
* Write all the information of request
* @param content of request
* @param directory to save in
* @param fileName path
* @throws IOException
*/
public static void fileWriterRequest(String content, String directory, String fileName) throws IOException {
OutputStream out = new FileOutputStream(PATH1 + directory + "/" + fileName + ".txt/"); //creat a stream
out.write(content.getBytes()); //write content on file
out.flush();
}
/**
* Read file if asked
* @param file to be read
* @return content of file
*/
public static String fileReader(File file) {
StringBuilder line = new StringBuilder(); //create a string builder
try (InputStream in = new FileInputStream(file)) {
int content;
while ((content = in.read()) != -1) {
line.append((char) content);
}
} catch (Exception e) {
e.printStackTrace();
}
return line.toString();
}
/**
* List all the directory
* @return File[] of directories
*/
public static File[] showDirectories() {
File directories = new File(PATH1);
File[] listOfDirectories = directories.listFiles(); //creat a list of file in given directory
assert listOfDirectories != null; //check if directory is not empty
return listOfDirectories;
}
/**
* show all the requests in a directory
* @param name of directory
* @return list of requests
*/
public static File[] showList(String name) {
File requests = new File(PATH1 + name);
File[] listOfRequests = requests.listFiles();
assert listOfRequests != null;
return listOfRequests;
}
/**
* check if the given name is a directory name or no
* @param name of directory
* @return true or false
*/
public static boolean isDirectory(String name) {
File directories = new File(PATH1);
File[] listOfDirectories = directories.listFiles();
assert listOfDirectories != null;
for (File file : listOfDirectories) //check out in directory to find given file name
if (file.getName().equals(name))
return true;
return false;
}
/**
* show options list of requests
* @param Directory given directory
* @throws FileNotFoundException
*/
public static void showRequestList(String Directory) throws FileNotFoundException {
File requests = new File(PATH1 + Directory);
File[] listOfRequests = requests.listFiles();
assert listOfRequests != null;
if (listOfRequests.length == 0)
System.out.println("No Request yet");
for (int i = 1; i <= listOfRequests.length; i++) { //count from 1 to the size of file list
for (File file : listOfRequests) { //check if present file has the same number as previous loop
if (file.getName().contains(String.valueOf(i))) {
Scanner scanner = new Scanner(new FileInputStream(file));
String line = scanner.nextLine().trim();
System.out.println(i + " . " + line);
}
}
}
}
/**
* Give number of file in a directory
* @param directory to check number of file in it
* @return number of file
*/
public static int numberOfFiles(String directory) {
File requests = new File(PATH1 + directory); //Get file in given path
File[] listOfRequests = requests.listFiles(); //make list of files in given path
return listOfRequests.length + 1; //return number of file
}
/**
* Show information of a requests
* @param number Of request in shown list
* @param directory Directory of request
*/
public static void showRequest(Integer number, String directory) {
File requests = new File(PATH1 + directory);
File[] listOfRequests = requests.listFiles();
assert listOfRequests != null;
for (File file : listOfRequests) {
if (file.getName().equals(String.valueOf(number) + ".txt")) {
System.out.println(fileReader(file));
}
}
}
/**
* Read different value of a requests in a file
* @param filePath given file address
* @throws FileNotFoundException
*/
public static void setMassageValues(String filePath) throws FileNotFoundException {
File file = new File(filePath);
Scanner scanner = new Scanner(new FileInputStream(file));
String line = scanner.nextLine();
line = scanner.nextLine();
while (!line.startsWith("headers")) { //read from body word till header
if (scanner.hasNextLine()) {
Body += line + "\n";
line = scanner.nextLine();
} else
break;
}
Body=Body.replace("body",""); //remove body word
Body=Body.replace("null","");
while (!line.startsWith("takedTime")) { //read from headers till takedTime word
if (scanner.hasNextLine()) {
HeadersOfMassage += line + "\n"; //set headers
line = scanner.nextLine();
} else
break;
}
HeadersOfMassage=HeadersOfMassage.replace("headers","");//remove headers word
HeadersOfMassage=HeadersOfMassage.replace("null","");
takedTime = line.replace("takedTime", ""); //set takedTime
statusCode = scanner.nextLine().replace("statusCode", ""); //set statusCode
statusMassage=scanner.nextLine().replace("statusMassage",""); //set statusMassage
byteCount=scanner.nextLine().replace("byteCount",""); //set byteCount
}
}
import com.sun.net.httpserver.Headers;
import javax.swing.*; import javax.swing.*;
import javax.swing.border.Border; import javax.swing.border.Border;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/** /**
* present GUI of insomnia * present GUI of insomnia
*
* @author Narges Salehi * @author Narges Salehi
*/ */
public class GUI { public class GUI {
...@@ -31,7 +42,14 @@ public class GUI { ...@@ -31,7 +42,14 @@ public class GUI {
JPanel header; JPanel header;
JTabbedPane tab; JTabbedPane tab;
JPanel jPanel; JPanel jPanel;
JLabel error;
JLabel tt;
JTree jTree; JTree jTree;
JMenuBar data;
JTextArea massageBody;
DefaultMutableTreeNode node1;
JTextArea nameValue;
JTextField urlField;
//check if system tray is on or not //check if system tray is on or not
boolean checkSystemTray = false; boolean checkSystemTray = false;
//go to next line to add component - count lines //go to next line to add component - count lines
...@@ -43,8 +61,12 @@ public class GUI { ...@@ -43,8 +61,12 @@ public class GUI {
//check how many time we use system tray //check how many time we use system tray
static int runOnce; static int runOnce;
//check theme //check theme
static boolean checkTheme=false; static boolean checkTheme = false;
static String method = "GET";
static String statusCode;
String Body;
String URL = "http://";
String directory = "narges";
/** /**
* creat a new GUI * creat a new GUI
...@@ -89,25 +111,25 @@ public class GUI { ...@@ -89,25 +111,25 @@ public class GUI {
//set accelerator for item //set accelerator for item
exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, ActionEvent.SHIFT_MASK)); exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, ActionEvent.SHIFT_MASK));
//item to set theme //item to set theme
JMenuItem theme=new JMenuItem("Dark/Light"); JMenuItem theme = new JMenuItem("Dark/Light");
theme.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, ActionEvent.SHIFT_MASK)); theme.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, ActionEvent.SHIFT_MASK));
//add action listener for set theme //add action listener for set theme
theme.addActionListener(new ActionListener() { theme.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
//boolean checks present theme //boolean checks present theme
if(!checkTheme){ if (!checkTheme) {
jPanel.setBackground(Color.white); jPanel.setBackground(Color.white);
jTree.setBackground(Color.white); jTree.setBackground(Color.white);
middle.setBackground(Color.white); middle.setBackground(Color.white);
right.setBackground(Color.white); right.setBackground(Color.white);
checkTheme=true; checkTheme = true;
}else{ } else {
jPanel.setBackground(Color.darkGray); jPanel.setBackground(Color.darkGray);
jTree.setBackground(Color.darkGray); jTree.setBackground(Color.darkGray);
middle.setBackground(Color.darkGray); middle.setBackground(Color.darkGray);
right.setBackground(Color.darkGray); right.setBackground(Color.darkGray);
checkTheme=false; checkTheme = false;
} }
} }
}); });
...@@ -169,7 +191,7 @@ public class GUI { ...@@ -169,7 +191,7 @@ public class GUI {
//creat and adding component //creat and adding component
JLabel Insomnia = new JLabel(" Insomnia"); JLabel Insomnia = new JLabel(" Insomnia");
Insomnia.setFont(new Font("Arial", 14, 20)); Insomnia.setFont(new Font("Arial", 14, 20));
Insomnia.setPreferredSize(new Dimension(0,50)); Insomnia.setPreferredSize(new Dimension(0, 50));
Insomnia.setForeground(Color.white); Insomnia.setForeground(Color.white);
jMenuBar.add(Insomnia, BorderLayout.LINE_START); jMenuBar.add(Insomnia, BorderLayout.LINE_START);
JMenu jMenu = new JMenu("▾"); JMenu jMenu = new JMenu("▾");
...@@ -220,14 +242,34 @@ public class GUI { ...@@ -220,14 +242,34 @@ public class GUI {
jMenu2.add(newRequest); jMenu2.add(newRequest);
left.add(jMenuBar2, gbc); left.add(jMenuBar2, gbc);
//creat and add panel for request //creat and add panel for request
jPanel = new JPanel(); jPanel = new JPanel();
jPanel.setLayout(new GridLayout(0, 1)); jPanel.setLayout(new GridLayout(0, 1));
//creating JTree and nodes to grouping request //creating JTree and nodes to grouping request
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("My Folder"); node1 = new DefaultMutableTreeNode("Requests");
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("Get My Request"); updateJTree(node1, Files.showDirectories());
node1.add(node2);
//creat tree //creat tree
jTree = new JTree(node1); jTree = new JTree(node1);
jTree.addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e) {
if (e.getPath().toString().contains(".txt")) {
String oldPath = e.getPath().toString();
String path = oldPath.replace(", ", "/");
path = path.replace("[", "./");
path = path.replace("]", "");
try {
Files.setMassageValues(path);
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}
massageBody.setText(Files.Body);
nameValue.setText(Files.HeadersOfMassage);
error.setText(Files.statusCode+" "+Files.statusMassage+ " ");
tt.setText(Files.takedTime+" s " +Files.byteCount + " B");
}
}
});
jTree.setBackground(Color.DARK_GRAY); jTree.setBackground(Color.DARK_GRAY);
gbc.gridy = 3; gbc.gridy = 3;
gbc.weightx = 1; gbc.weightx = 1;
...@@ -250,15 +292,39 @@ public class GUI { ...@@ -250,15 +292,39 @@ public class GUI {
JMenuBar URL = new JMenuBar(); JMenuBar URL = new JMenuBar();
URL.setPreferredSize(new Dimension(0, 50)); URL.setPreferredSize(new Dimension(0, 50));
//text field to get URL //text field to get URL
JTextField urlField = new JTextField(); urlField = new JTextField();
urlField.setPreferredSize(new Dimension(0, 20)); urlField.setPreferredSize(new Dimension(0, 20));
//creating and adding item to JMenu //creating and adding item to JMenu
JMenu methods = new JMenu(" Get ▾"); JMenu methods = new JMenu(" Get ▾");
JMenuItem get = new JMenuItem("GET"); JMenuItem get = new JMenuItem("GET");
get.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
method = "GET";
}
});
JMenuItem post = new JMenuItem("POST"); JMenuItem post = new JMenuItem("POST");
post.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
method = "POST";
}
});
JMenuItem put = new JMenuItem("PUT"); JMenuItem put = new JMenuItem("PUT");
put.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
method = "Put";
}
});
JMenuItem patch = new JMenuItem("PATCH"); JMenuItem patch = new JMenuItem("PATCH");
JMenuItem delete = new JMenuItem("DELETE"); JMenuItem delete = new JMenuItem("DELETE");
delete.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
method = "DELETE";
}
});
JMenuItem options = new JMenuItem("OPTIONS"); JMenuItem options = new JMenuItem("OPTIONS");
JMenuItem head = new JMenuItem("HEAD"); JMenuItem head = new JMenuItem("HEAD");
JMenuItem cm = new JMenuItem("Custom Method"); JMenuItem cm = new JMenuItem("Custom Method");
...@@ -346,13 +412,22 @@ public class GUI { ...@@ -346,13 +412,22 @@ public class GUI {
gbc.anchor = GridBagConstraints.NORTHWEST; gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.fill = GridBagConstraints.BOTH; gbc.fill = GridBagConstraints.BOTH;
middle.add(tab, gbc); middle.add(tab, gbc);
send.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (urlField.getText() != null) {
sendRequest();
((DefaultTreeModel) jTree.getModel()).reload();
}
}
});
//************************************************************************************************************** //**************************************************************************************************************
//right side of insomnia //right side of insomnia
//designing right panel //designing right panel
//set gridBagLayout for panel //set gridBagLayout for panel
right.setLayout(new GridBagLayout()); right.setLayout(new GridBagLayout());
//creat a menu bar to keep statusCode statusMassage and Time //creat a menu bar to keep statusCode statusMassage and Time
JMenuBar data = new JMenuBar(); data = new JMenuBar();
//set size for menu bar //set size for menu bar
data.setPreferredSize(new Dimension(0, 50)); data.setPreferredSize(new Dimension(0, 50));
//set layout for menu bar //set layout for menu bar
...@@ -362,11 +437,11 @@ public class GUI { ...@@ -362,11 +437,11 @@ public class GUI {
//add item to menu bar //add item to menu bar
data.add(time, BorderLayout.LINE_END); data.add(time, BorderLayout.LINE_END);
//creat item to keep statusMassage //creat item to keep statusMassage
JLabel error = new JLabel("Error "); error = new JLabel("Error ");
//add item to menu bar //add item to menu bar
data.add(error, BorderLayout.LINE_START); data.add(error, BorderLayout.LINE_START);
//creat item to keep statusCode //creat item to keep statusCode
JLabel tt = new JLabel("0 ms 0 B"); tt = new JLabel(" 0 ms 0 B");
//add item to menu bar //add item to menu bar
data.add(tt, BorderLayout.CENTER); data.add(tt, BorderLayout.CENTER);
//set gridBagConstrains for add menu bar to right panel //set gridBagConstrains for add menu bar to right panel
...@@ -388,7 +463,8 @@ public class GUI { ...@@ -388,7 +463,8 @@ public class GUI {
//set layout for panel //set layout for panel
preview.setLayout(new GridBagLayout()); preview.setLayout(new GridBagLayout());
//creat a text area for massage body //creat a text area for massage body
JTextArea massageBody = new JTextArea(); massageBody = new JTextArea();
JScrollPane jScrollPane = new JScrollPane(massageBody);
massageBody.setBackground(Color.darkGray); massageBody.setBackground(Color.darkGray);
//add panel to tabbedPane //add panel to tabbedPane
tab1.add("Preview", preview); tab1.add("Preview", preview);
...@@ -411,7 +487,7 @@ public class GUI { ...@@ -411,7 +487,7 @@ public class GUI {
gbc.weighty = 1; gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH; gbc.fill = GridBagConstraints.BOTH;
//add text area to panel //add text area to panel
preview.add(massageBody, gbc); preview.add(jScrollPane, gbc);
//creat a panel for header //creat a panel for header
JPanel header2 = new JPanel(); JPanel header2 = new JPanel();
header2.setBackground(Color.darkGray); header2.setBackground(Color.darkGray);
...@@ -420,7 +496,7 @@ public class GUI { ...@@ -420,7 +496,7 @@ public class GUI {
//add header to tabbedPane //add header to tabbedPane
tab1.add("Header", header2); tab1.add("Header", header2);
//add item to header //add item to header
JLabel name = new JLabel("Name"); JLabel name = new JLabel("Name value");
name.setForeground(Color.gray); name.setForeground(Color.gray);
JLabel value = new JLabel("value"); JLabel value = new JLabel("value");
value.setForeground(Color.gray); value.setForeground(Color.gray);
...@@ -428,18 +504,39 @@ public class GUI { ...@@ -428,18 +504,39 @@ public class GUI {
gbc.gridy = 0; gbc.gridy = 0;
gbc.gridx = 0; gbc.gridx = 0;
gbc.weightx = 1; gbc.weightx = 1;
gbc.weighty = 0; gbc.weighty = 1;
gbc.fill = GridBagConstraints.HORIZONTAL; gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.anchor = GridBagConstraints.NORTHWEST; gbc.anchor = GridBagConstraints.NORTHWEST;
header2.add(name, gbc); header2.add(name, gbc);
gbc.gridx = 1; gbc.gridx = 1;
header2.add(value, gbc); // header2.add(value, gbc);
JButton copyToClipboard = new JButton("Copy to Clipboard"); nameValue = new JTextArea();
nameValue.setBackground(Color.darkGray);
JScrollPane jScrollPane1 = new JScrollPane(nameValue);
jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
gbc.gridy = 1; gbc.gridy = 1;
gbc.gridx = 1; gbc.gridx = 0;
gbc.weightx = 1; gbc.weightx = 1;
gbc.weighty = 12;
gbc.gridwidth = 1;
gbc.fill = GridBagConstraints.BOTH;
gbc.anchor = GridBagConstraints.WEST;
header2.add(jScrollPane1, gbc);
JButton copyToClipboard = new JButton("Copy to Clipboard");
copyToClipboard.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
nameValue.selectAll();
nameValue.copy();
}
});
gbc.gridy = 2;
gbc.gridx = 0;
gbc.weightx = 0;
gbc.weighty = 1; gbc.weighty = 1;
gbc.fill = GridBagConstraints.HORIZONTAL; gbc.anchor = GridBagConstraints.EAST;
gbc.fill = GridBagConstraints.NONE;
header2.add(copyToClipboard, gbc); header2.add(copyToClipboard, gbc);
//creat other panel //creat other panel
JPanel cookies = new JPanel(); JPanel cookies = new JPanel();
...@@ -469,12 +566,32 @@ public class GUI { ...@@ -469,12 +566,32 @@ public class GUI {
//add splitPane to window //add splitPane to window
window.add(jSplitPane1); window.add(jSplitPane1);
} }
//end of GUI //end of GUI *******************************************************************************************************
public void updateJTree(DefaultMutableTreeNode baseNode, File[] FileList) {
baseNode.removeAllChildren();
for (File file : FileList) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(file.getName());
if (Files.showList(file.getName()) != null) {
for (File file1 : Files.showList(file.getName())) {
node.add(new DefaultMutableTreeNode(file1.getName()));
}
baseNode.add(node);
}
}
}
public void updateComboBox(JComboBox comboBox, File[] FileList) {
for (File file : FileList) {
comboBox.addItem(file.getName());
}
}
/** /**
* creat a panel with given data * creat a panel with given data
*
* @param jPanel JPanel * @param jPanel JPanel
* @param color of panel * @param color of panel
* @param border of panel * @param border of panel
* @param height of panel * @param height of panel
* @param weight of panel * @param weight of panel
...@@ -486,8 +603,10 @@ public class GUI { ...@@ -486,8 +603,10 @@ public class GUI {
} }
//------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------
/** /**
* set JTree render * set JTree render
*
* @return defaultTreeCellRenderer * @return defaultTreeCellRenderer
* copied from stack over flow * copied from stack over flow
*/ */
...@@ -502,6 +621,7 @@ public class GUI { ...@@ -502,6 +621,7 @@ public class GUI {
/** /**
* check JTree focus lost of gained * check JTree focus lost of gained
*
* @param tree JTree * @param tree JTree
* @return new FocusListener * @return new FocusListener
*/ */
...@@ -522,6 +642,7 @@ public class GUI { ...@@ -522,6 +642,7 @@ public class GUI {
/** /**
* check if outside of JTree has clicked - clear selections * check if outside of JTree has clicked - clear selections
*
* @param tree JTree * @param tree JTree
* @return new MouseListener * @return new MouseListener
*/ */
...@@ -558,6 +679,7 @@ public class GUI { ...@@ -558,6 +679,7 @@ public class GUI {
}; };
} }
//------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------
/** /**
* class perform listener for top menu * class perform listener for top menu
*/ */
...@@ -667,7 +789,7 @@ public class GUI { ...@@ -667,7 +789,7 @@ public class GUI {
gbc.anchor = GridBagConstraints.NORTHWEST; gbc.anchor = GridBagConstraints.NORTHWEST;
JLabel info1 = new JLabel(" Requests in Insomnia are saved in groups."); JLabel info1 = new JLabel(" Requests in Insomnia are saved in groups.");
smallFrame.add(info1, gbc); smallFrame.add(info1, gbc);
JLabel name = new JLabel(" Request Name :"); JLabel name = new JLabel(" Group Name :");
gbc.gridy = 1; gbc.gridy = 1;
gbc.gridx = 0; gbc.gridx = 0;
gbc.weightx = 1; gbc.weightx = 1;
...@@ -686,19 +808,45 @@ public class GUI { ...@@ -686,19 +808,45 @@ public class GUI {
gbc.weighty = 1; gbc.weighty = 1;
smallFrame.add(info2, gbc); smallFrame.add(info2, gbc);
JComboBox groups = new JComboBox(); JComboBox groups = new JComboBox();
updateComboBox(groups, Files.showDirectories());
gbc.gridy = 4; gbc.gridy = 4;
gbc.gridx = 0; gbc.gridx = 0;
gbc.weightx = 1; gbc.weightx = 1;
gbc.weighty = 1; gbc.weighty = 1;
smallFrame.add(groups, gbc); smallFrame.add(groups, gbc);
JButton creat = new JButton("Creat +"); JButton creat = new JButton("Create");
creat.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String name = requestName.getText();
Files.makeDirectory(name);
updateJTree(node1, Files.showDirectories());
((DefaultTreeModel) jTree.getModel()).reload();
directory = name;
smallFrame.dispatchEvent(new WindowEvent(smallFrame, WindowEvent.WINDOW_CLOSING));
}
});
gbc.gridy = 5; gbc.gridy = 5;
gbc.gridx = 0; gbc.gridx = 0;
gbc.weightx = 1; gbc.weightx = 3;
gbc.weighty = 1; gbc.weighty = 1;
gbc.fill = GridBagConstraints.NONE; gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.SOUTHEAST; gbc.anchor = GridBagConstraints.SOUTHEAST;
smallFrame.add(creat, gbc); smallFrame.add(creat, gbc);
JButton save = new JButton("Save");
save.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
directory = (String) groups.getSelectedItem();
smallFrame.dispatchEvent(new WindowEvent(smallFrame, WindowEvent.WINDOW_CLOSING));
}
});
gbc.gridy = 5;
gbc.gridx = 1;
gbc.weightx = 1;
gbc.weighty = 1;
smallFrame.add(save, gbc);
} }
} }
} }
...@@ -845,5 +993,28 @@ public class GUI { ...@@ -845,5 +993,28 @@ public class GUI {
System.out.println("TrayIcon could not be added."); System.out.println("TrayIcon could not be added.");
} }
} }
}
public void sendRequest() {
String URL = "http://" + urlField.getText();
try {
if(method.equals("PUT") || method.equals("POST")){
Body = HTTPClient.Request(URL, true, false, true, false,
true, method, null, null, null, directory);
}
Body = HTTPClient.Request(URL, true, false, true, false,
false, method, null, null, null, directory);
massageBody.setLineWrap(true);
massageBody.setText(Body);
massageBody.setForeground(Color.white);
error.setText(String.valueOf(HTTPClient.getStatusCode())+" "+HTTPClient.statusMassage);
tt.setText(" " + HTTPClient.getTakedTime() + " s " + HTTPClient.takedByte+ "B");
for (Map.Entry<String, List<String>> entry : HTTPClient.map.entrySet()) {
String temp = nameValue.getText();
nameValue.setText(temp + "\n" + entry.getKey() + " : " + entry.getValue());
}
nameValue.setForeground(Color.lightGray);
} catch (IOException ex) {
System.out.println("wrong URL");
}
}
}
\ No newline at end of file
import java.io.*;
import java.net.*;
import java.net.http.HttpClient;
import java.nio.charset.StandardCharsets;
import java.util.*;
/**
* Provide a console http-request-app
*
* @author Narges Salehi
*/
public class HTTPClient {
HttpClient client = HttpClient.newHttpClient(); //creat a http client to connect
boolean showHeaders; //creat a boolean to check if headers are going to be shown
boolean saveResponse; //creat a boolean to check if response are going to be saved
boolean saveRequest; //creat a boolean to check if request are going to be saved
boolean formData; //creat a boolean to check if request are going to be formData
boolean setHeaders; //creat a boolean to check if headers are going to be set
boolean listIsOn = false; //creat a boolean to check if request are showing
static int statusCode; //save status code
static String statusMassage; // save status massage
static String takedTime; // save taked time
static String takedByte; // save taked byte
static Map<String, List<String>> map; //save Header of request
static HashMap<String, String> Headers; // save given header by user
static String stringOfData; // save given data by user as a string
static HashMap<String, String> Data; //save given data as HashMap
static String word1; //save url with out 'http://'
/**
* Creat a console app
*
* @throws IOException
* @throws InterruptedException
*/
public HTTPClient() throws IOException, InterruptedException {
Headers = new HashMap<>();
Data = new HashMap<>();
Scanner scanner = new Scanner(System.in);
while (true) {
String method = "GET"; //set default method as get
String key = null;
String value = null;
String name = null;
String directory = null;
String command = scanner.nextLine(); //creat a scanner to scan commands
String[] line = (command.split(" ")); //spilt commands in " "
ArrayList<String> words = new ArrayList<String>(Arrays.asList(line)); //put commands in an ArrayList
String URL = "http://" + words.get(1); //save real url
word1 = words.get(1); //save raw url
if (words.get(0).equals("jurl")) { //check if given command start with jurl or no
if (words.get(1).equals("--help") || words.get(1).equals("-h")) {
listIsOn = false;
System.out.println(
"-M or --method " + "," + "select method , can be deleted for GET " +
"\n" + "-H or --headers" + "," + "set request headers " +
"\n" + "-O or --output" + "," + "save body in file" +
"\n" + "-S or --save" + "," + "save request in file " +
"\n" + "-d or --data" + "," + "set massage body as form data " +
"\n" + "-i" + " ," + "showing headers of response " +
"\n" + "end" + " ," + "Exit program " +
"\n" + "create" + " , " + "create a new directory"
);
continue;
} else if (words.get(1).equals("list")) {
if (Files.isDirectory(words.get(2))) {
Files.showRequestList(words.get(2));
listIsOn = true;
} else
System.out.println("This directory is not true");
continue;
} else if (words.get(1).equals("fire") && Files.isDirectory(words.get(2)) && listIsOn) {
for (int i = 3; i < words.size(); i++) {
if (isInteger(words.get(i))) {
int number = Integer.valueOf(words.get(i));
Files.showRequest(number, words.get(2));
} else {
System.out.println("No more Number");
break;
}
}
continue;
} else if (words.get(1).equals("end")) {
System.exit(0);
} else if (words.get(1).equals("create")) {
String PathName = words.get(2);
Files.makeDirectory(PathName);
continue;
} else {
listIsOn = false;
if (true) {
for (String word : words) {
switch (word) {
case "-i":
showHeaders = true;
break;
case "-O":
int indexOfName = words.indexOf("-O");
if (words.size() - 1 > indexOfName) {
indexOfName++;
if (!words.get(indexOfName).startsWith("-"))
name = words.get(indexOfName);
else {
Date date = new Date();
name = "output_" + date.toString();
}
} else {
Date date = new Date();
name = "output_" + date.toString();
}
saveResponse = true;
break;
case "--output":
indexOfName = words.indexOf("-O");
if (words.size() - 1 > indexOfName) {
indexOfName++;
if (!words.get(indexOfName).startsWith("-"))
name = words.get(indexOfName);
else {
Date date = new Date();
name = "output_" + date.toString();
}
} else {
Date date = new Date();
name = "output_" + date.toString();
}
saveResponse = true;
break;
case "-S":
int indexOfDirectory = words.indexOf("-S");
indexOfDirectory++;
directory = words.get(indexOfDirectory);
saveRequest = true;
break;
case "--save":
indexOfDirectory = words.indexOf("--save");
indexOfDirectory++;
directory = words.get(indexOfDirectory);
saveRequest = true;
break;
case "-d":
int indexOfData = words.indexOf("-d");
indexOfData++;
String temp = words.get(indexOfData);
stringOfData = temp;
temp = temp.replace("\"", "");
String[] data1 = temp.split("&");
ArrayList<String> data2 = new ArrayList<String>(Arrays.asList(data1));
for (String s : data2) {
String[] keyValue = s.split("=");
ArrayList<String> keyValue2 = new ArrayList<String>(Arrays.asList(keyValue));
Data.put(keyValue2.get(0), keyValue2.get(1));
}
formData = true;
break;
case "--data":
indexOfData = words.indexOf("--data");
indexOfData++;
temp = words.get(indexOfData);
stringOfData = temp;
temp = temp.replace("\"", "");
data1 = temp.split("&");
data2 = new ArrayList<String>(Arrays.asList(data1));
for (String s : data2) {
String[] keyValue = s.split("=");
ArrayList<String> keyValue2 = new ArrayList<String>(Arrays.asList(keyValue));
Data.put(keyValue2.get(0), keyValue2.get(1));
}
formData = true;
break;
case "-H":
int indexOfHeader = words.indexOf("-H");
indexOfHeader++;
temp = words.get(indexOfHeader);
temp = temp.replace("\"", "");
String[] header1 = temp.split(";");
ArrayList<String> header2 = new ArrayList<String>(Arrays.asList(header1));
for (String s : header2) {
String[] keyValue = s.split(":");
ArrayList<String> keyValue2 = new ArrayList<String>(Arrays.asList(keyValue));
Headers.put(keyValue2.get(0), keyValue2.get(1));
}
setHeaders = true;
break;
case "--headers":
indexOfHeader = words.indexOf("--headers");
indexOfHeader++;
temp = words.get(indexOfHeader);
temp = temp.replace("\"", "");
header1 = temp.split(";");
header2 = new ArrayList<String>(Arrays.asList(header1));
for (String s : header2) {
String[] keyValue = s.split(":");
ArrayList<String> keyValue2 = new ArrayList<String>(Arrays.asList(keyValue));
Headers.put(keyValue2.get(0), keyValue2.get(1));
}
setHeaders = true;
break;
case "-M":
int indexOfMethod = words.indexOf("-M");
indexOfMethod++;
method = words.get(indexOfMethod);
break;
case "--method":
indexOfMethod = words.indexOf("--method");
indexOfMethod++;
method = words.get(indexOfMethod);
break;
default:
break;
}
}
} else {
System.out.println("2 command not found" + "try 'jurl --help' or 'jurl -h' for more information");
continue;
}
}
} else {
System.out.println("3 command not found" + "try 'jurl --help' or 'jurl -h' for more information");
continue;
}
//send request
Request(URL, showHeaders, setHeaders, saveRequest, saveResponse, formData, method, key, value, name, directory);
//set value to default for new request
showHeaders = false;
setHeaders = false;
saveRequest = false;
saveResponse = false;
formData = false;
}
}
/**
* check if given string is url or not
* @param url given string
* @return true of false
*/
public boolean isURL(String url) {
try {
(new java.net.URL(url)).openStream().close();
return true;
} catch (Exception ignored) {
}
return false;
}
/**
* check if given string is a integer or not
* @param s given string
* @return true of false
*/
public static boolean isInteger(String s) {
try {
Integer.parseInt(s);
} catch (NumberFormatException | NullPointerException e) {
return false;
}
return true;
}
/**
* Get taked time of request
* @return taked time
*/
public static String getTakedTime() {
return takedTime;
}
/**
* Get status code of request
* @return status code
*/
public static int getStatusCode() {
return statusCode;
}
/**
* Send a HTTPRequest with given data
*
* @param URL url
* @param showHeaders
* @param setHeaders
* @param saveRequest
* @param saveResponse
* @param formData
* @param method method of request
* @param key header key
* @param value header value
* @param name name of file
* @param directory to save request in
* @return string of body
* @throws IOException
*/
public static String Request(String URL, boolean showHeaders, boolean setHeaders,
boolean saveRequest, boolean saveResponse, boolean formData, String method,
String key, String value, String name, String directory) throws IOException {
long start = System.currentTimeMillis();//start counting time
URL url = new URL(URL); //creat a url
HttpURLConnection yc = (HttpURLConnection) url.openConnection(); //open connection
if (!method.equals("null") && !method.equals("GET")) { //set method default is get
yc.setRequestMethod(method); //set method
yc.setDoOutput(true);
}
if (setHeaders) { //if set headers is true set given headers by user as headers
for (String Key : Headers.keySet()) {
for (String Value : Headers.values()) {
if (Headers.get(Key).equals(Value)) {
yc.setRequestProperty(Key, Value);
}
}
}
}
if (formData) { // if user give data
if (word1.contains("urlencoded")) { //check if its url data
try {
int data = stringOfData.getBytes(StandardCharsets.UTF_8).length; //get bytes of data
yc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); //set properties
yc.setRequestProperty("charset", "utf-8");
yc.setRequestProperty("Content-Length", Integer.toString(data));
try (OutputStream os = yc.getOutputStream()) { //creat stream to write values
os.write(stringOfData.getBytes(StandardCharsets.UTF_8));
os.flush();
}
} catch (IOException e) {
e.printStackTrace();
yc.disconnect();
}
}
if (word1.contains("formdata")) { //if it is form data
try {
yc.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + "1111"); //set properties
BufferedOutputStream request = new BufferedOutputStream(yc.getOutputStream()); //creat a stream
bufferOutFormData(Data, "1111", request); //call method of form data set values
} catch (IOException e) {
e.printStackTrace();
}
}
}
//start reading body
StringBuilder Body = new StringBuilder(); // to build body as a string
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream())); //stream to get body
String inputLine; //line to keep body lines
while ((inputLine = in.readLine()) != null) { //check end of body
System.out.println(inputLine); //print body in console
Body.append(inputLine); //creat body
Body.append("\n");
}
in.close(); //close stream
map = yc.getHeaderFields(); //get headers of request
if (showHeaders) { //if show headers is true set map value as headers of request
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
System.out.println(entry.getKey()
+ " : " + entry.getValue());
}
}
//count byte of a request
int byteCount = 0;
int headerIndex = 0;
while (true) {
String key2 = yc.getHeaderFieldKey(headerIndex);
if (key == null)
break;
String value2 = yc.getHeaderField(headerIndex++);
byteCount += key.getBytes(StandardCharsets.US_ASCII).length
+ value.getBytes(StandardCharsets.US_ASCII).length + 2;
}
byteCount += yc.getHeaderFieldInt("Content-Length", Integer.MIN_VALUE);
takedByte = String.valueOf(byteCount);
long end = System.currentTimeMillis();
takedTime = String.valueOf((end - start) / 1000);
takedTime += ".";
takedTime += String.valueOf((end - start) % 1000);
if (saveRequest) {//if save request is true save request as below pattern
//first line of file show 'option view' in list
String topLine = "url: " + URL + " | " + "method: " + method + " | " + "headers: " + key + ": " + value + " | ";
String content = topLine + "\n" +
"body" + Body +
"headers" + map + "\n" +
"takedTime" + takedTime + "\n" +
"statusCode" + yc.getResponseCode() + "\n" +
"statusMassage" + yc.getResponseMessage() + "\n" +
"byteCount" + byteCount;
Files.fileWriterRequest(content, directory, String.valueOf(Files.numberOfFiles(directory)));//write content in given directory
}
if (saveResponse) { //if save response is true save response of request
Files.fileWriterResponse(Body.toString(), name);
}
System.out.println(yc.getResponseCode());//print status code
statusCode = yc.getResponseCode();//set status code
statusMassage = yc.getResponseMessage();//set status massage
return Body.toString();//return string of body
}
/**
* Set Values as data im form data
*
* @param body set of values
* @param boundary boundary
* @param bufferedOutputStream stream to write values
* @throws IOException
*/
public static void bufferOutFormData(HashMap<String, String> body, String boundary, BufferedOutputStream bufferedOutputStream) throws IOException {
for (String key : body.keySet()) {
bufferedOutputStream.write(("--" + boundary + "\r\n").getBytes());
if (key.contains("file")) {
bufferedOutputStream.write(("Content-Disposition: form-data; filename=\"" +
(new File(body.get(key))).getName() + "\"\r\nContent-Type: Auto\r\n\r\n").getBytes());
try {
BufferedInputStream tempBufferedInputStream = new BufferedInputStream(new FileInputStream(new File(body.get(key))));
byte[] filesBytes = tempBufferedInputStream.readAllBytes();
bufferedOutputStream.write(filesBytes);
bufferedOutputStream.write("\r\n".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
} else {
bufferedOutputStream.write(("Content-Disposition: form-data; name=\"" + key + "\"\r\n\r\n").getBytes());
bufferedOutputStream.write((body.get(key) + "\r\n").getBytes());
}
}
bufferedOutputStream.write(("--" + boundary + "--\r\n").getBytes());
bufferedOutputStream.flush();
bufferedOutputStream.close();
}
}
...@@ -2,6 +2,7 @@ import javax.swing.*; ...@@ -2,6 +2,7 @@ import javax.swing.*;
/** /**
* Run the program * Run the program
*
* @author Narges Salehi * @author Narges Salehi
*/ */
public class Main { public class Main {
...@@ -20,4 +21,9 @@ public class Main { ...@@ -20,4 +21,9 @@ public class Main {
//creat a new GUI //creat a new GUI
GUI gui=new GUI(); GUI gui=new GUI();
} }
// public static void main(String[] args) throws IOException, InterruptedException {
// HTTPClient h = new HTTPClient();
//
// }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment