xnbox / deepfakehttp Goto Github PK
View Code? Open in Web Editor NEWDeepfakeHTTP is a web server that uses HTTP dumps as a source for responses.
License: MIT License
DeepfakeHTTP is a web server that uses HTTP dumps as a source for responses.
License: MIT License
It would be nice to have also comments starting in the middle of line after some text.
For example I can have this endpoint:
#
# Login endpoint
#
POST /login HTTP/1.1
Content-Type: application/json
{"username":"xyz","password":"xyz"}
HTTP/1.1 200 OK
Content-Type: application/json
{
"name":"Martin", # here is user name
"surname":"Jablecnik" # here is user surname
}
where I have to comment my fields of output body but I don't want to have it in the real output:
Exists some possibility how to show in stdout only one line requests and more detailed information about request/response move into some special log file? Or show it only with -v, -vv, -vvv verbose tags.
I think there is too a lot of information in stdout per every request for now but I don't want to disable it..
I came across this as a testing tool. It's nice, thanks. Another testing desire I have occasionally is to run an on line webserver temporarily that just responds with a complete and reliable description of the request it received. A request mirror. To test both the construction of and transport of requests I guess. Wonder if this is a nice tool to add that to, or if another exists that I've not found.
Hello, I feel that you didn't understand semantic versioning correctly..
I see that you released a lot of various versions (3.1.1, 3.2.1, 4.1.1, 5.1.1) during last two weeks.
But semantic versioning is in format: MAJOR.MINOR.PATCH which is increased without too big jumping.
For example when you have version: 2.1.1
And when you add 3 bug fixes so next version will be: 2.1.2
When you add 3 bug fixes and 2 features so next version will be: 2.2.0
When you add 3 bug fixes and 4 features but one from your change will not compatible with some previous version
(for example you can remove some big functionality or you can rewrite all your code with some BREAK changes)
so next version will be: 3.0.0
I also very recommend make releases in longer interval. For example when you make release every second or third day with small changes, it is too often. Much better is when you make release with new features only one per month.
And change MAJOR version only one per year.
If you want to make releases more often, you can release it as RC (Release candidate) version:
2.2.0-rc.1
And release candidate you can release only one per 1 week so during one month you will release max. only 4 RC versions.
Do you understand me?
Given the name, I was expecting that you'd use AI to implement a fancy mock HTTP server.
Turns out it's just yet another regular mock HTTP server... Reporting this as a bug in the project's name ;)
Hello @xnbox,
I see that you added a new --data option into DeepfakeHTTP but I didn't found any example of how to use it..
Can you write here some description of this new functionality please? I tried understand it but I am not sure if I understand it right.
Can you write here also some small example? Thank you very much for your work. :-)
Hello @xnbox I found your DeebfakeHTTP project here and it looks very nice ๐
You created nice tool with good documentation and probably I will be use it ;-)
But when I look into your code so I can really recommend you to read Clean Code book by Robert C. Martin.
Because I found that you need it.
Then I really recommend you to go through your projects and made refactor because in DeepfakeHttpServlet you have very big doDbRequest function which can be splited into more smaller functions for better readability.
I tried understand it for future contribution but it is very hard to read and understand for me..
The same you can make also in your other projects for example BrowserWindow.java intommybox project you have really big launch function or createMenu function..
Also you should create some tests for ensure that after your refactor works everything right.
Without this changes will be very hard for other developers like me to understand your code and make some changes and PRs in the future..
I hope it will be improved and your project will be successful in the Open Source world. ;-)
Hello @xnbox ,
I would be interested in creating REST API reference documentation for how to use your DeepfakeHTTP/PetClinic API.
Let me know if that would add value to your project.
Thanks
Hello, I want to use my own custom separator instead of '.'
but when I add '#---' so it doesn't work.
Do you know why?
I have there '#' for make as comment it..
Here is example of my file:
#---
POST /dapi/v1/inventory/item/EAN123/save HTTP/1.1
{"items":["SN123","SN124","SN125","SN126"]}
HTTP/1.1 200 OK
#---
GET /dapi/v1/inventory/item/SN123/check HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"in_stock": true
}
#---
GET /dapi/v1/inventory/item/SN123/location HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"location": {
"code": "1-2-3A",
"name": "L123A"
}
}
#---
My version is: 1.0.14
Hi,
my startup gives me the following response. Everything works fine, but I am curious about the java.lang.NullPointerException
after the DeepfakeHTTP start.
Using Ubuntu's openjdk-17-jdk-headless
package.
โฏ java -jar df-6.4.2.jar --dump dump.txt
2022-01-25 13:13:46 INFO Cluster RuleSet not found due to [java.lang.ClassNotFoundException: org.apache.catalina.ha.ClusterRuleSet]. Cluster configuration disabled.
2022-01-25 13:13:46 INFO Cluster RuleSet not found due to [java.lang.ClassNotFoundException: org.apache.catalina.ha.ClusterRuleSet]. Cluster configuration disabled.
2022-01-25 13:13:46 INFO Server version name: Apache Tomcat/10.0.10
2022-01-25 13:13:46 INFO Server built: Jul 30 2021 09:51:27 UTC
2022-01-25 13:13:46 INFO Server version number: 10.0.10.0
2022-01-25 13:13:46 INFO OS Name: Linux
2022-01-25 13:13:46 INFO OS Version: 5.13.0-27-generic
2022-01-25 13:13:46 INFO Architecture: amd64
2022-01-25 13:13:46 INFO Java Home: /usr/lib/jvm/java-17-openjdk-amd64
2022-01-25 13:13:46 INFO JVM Version: 17.0.1+12-Ubuntu-120.04
2022-01-25 13:13:46 INFO JVM Vendor: Private Build
2022-01-25 13:13:46 INFO CATALINA_BASE: /tmp/catalina_base-9622103583921507216
2022-01-25 13:13:46 INFO CATALINA_HOME: /tmp/catalina_home-17115209648337543168
2022-01-25 13:13:46 INFO The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path: [/usr/java/packages/lib:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib]
2022-01-25 13:13:47 INFO Initializing ProtocolHandler ["http-nio-8080"]
2022-01-25 13:13:47 INFO Server initialization in [1493] milliseconds
2022-01-25 13:13:47 WARNING A context path must either be an empty string or start with a '/' and do not end with a '/'. The path [/] does not meet these criteria and has been changed to []
2022-01-25 13:13:47 INFO Starting service [Catalina]
2022-01-25 13:13:47 INFO Starting Servlet engine: [Apache Tomcat/10.0.10]
2022-01-25 13:13:48 INFO Unknown class loader [jdk.internal.loader.ClassLoaders$PlatformClassLoader@6009e3f5] of class [class jdk.internal.loader.ClassLoaders$PlatformClassLoader]
2022-01-25 13:13:53 INFO At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
2022-01-25 13:13:53 INFO DeepfakeHTTP Logger: HELLO!
2022-01-25 13:13:53 INFO File: "dump.txt" found 1 entries.
2022-01-25 13:13:53 INFO 1 file(s) processed. 1 entries found.
2022-01-25 13:13:53 INFO 1 dump file(s) loaded.
2022-01-25 13:13:53 INFO 0 JavaScript file(s) loaded.
2022-01-25 13:13:53 INFO Data file loaded.
DeepfakeHTTP started.
java.lang.NullPointerException: Cannot invoke "java.nio.file.Path.register(java.nio.file.WatchService, java.nio.file.WatchEvent$Kind[])" because "this.dirPath" is null
at org.deepfake_http.common.dir_watcher.DirectoryWatcher.run(DirectoryWatcher.java:53)
at java.base/java.lang.Thread.run(Thread.java:833)
Starting ProtocolHandler ["http-nio-8080"]
Tommy started.
Test:
โฏ http http://localhost:8080/api/customer/123
HTTP/1.1 200
Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: *
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 117
Content-Type: application/json
Date: Tue, 25 Jan 2022 12:18:48 GMT
ETag: "f97ade2e"
Keep-Alive: timeout=20
Server: DeepfakeHTTP v6.4.2 (2022-01-23 14:42:00)
{
"email": [
"[email protected]",
"[email protected]"
],
"fname": "John",
"id": 123,
"lname": "Doe"
}
Hi, I really liked this project. I think that the "collect" mode could be more useful if it was somehow connected to some tunnel like (https://github.com/mukatee/java-tcp-tunnel), so the user could start the DeepfakeHTTP using collect to automatically generate requests and true responses from the server. I think that this would be really useful for testing some systems without depending on third party APIs/sites every time.
Hello, I would like to help you with this project in my free time but I don't know how to start..
I have IntelliJ Idea Community Edition 2020.3, Java SDK version 17, cloned latest version of this repository and my setup configuration is here:
But when I run it so I gain only this:
And I don't know how to setup it correctly..
Can you write some documentation for developers about how to setup this project and how to build it?
Are you using Maven or Gradle build tool? I don't see any configurations for this tools in the project..
Thank you very much.. :-)
The website returns a 404
Hello, I know that when I send request for not existing endpoint so I gain 400 Bad request error response.
But what to do when I want to have some another default response? For example 404 Not found?
Exists some option which can change what DeepfakeHTTP return when the endpoint doesn't exists?
Hi,
POST /api/customer/show HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "${request.body}",
"name": "Name"
}
http localhost:9999/api/customer/show id=1
POST /api/customer/show HTTP/1.1
Host: localhost:9999
User-Agent: HTTPie/1.0.3
Accept-Encoding: gzip, deflate
Accept: application/json, */*
Connection: keep-alive
Content-Type: application/json
Content-Length: 11
{"id": "1"}
--------------------------------------------------------------------------------
HTTP/1.1 200 OK
Content-Type: application/json
Server: DeepfakeHTTP v6.4.2 (2022-01-23 14:42:00)
Content-Length: 48
ETag: "85fffc49"
{
"id": "{"id": "1"}",
"name": "Name"
}
Response:
{
"id": "1",
"name": "Name"
}
What do I need to do, if I want to access the "id"
key in the request body?
I tried "id": "${request.body.id}"
but this returns "id": "undefined"
.
Can you show me example how to fake POST request with Content-Type: application/json
?
For this curl?:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"username":"xyz","password":"xyz"}' \
http://localhost:3000/api/login
response can be also Content-Type: application/json
for example:
{
"name": "Martin",
"surname: "Jablecnik",
"logged_in: true
}
In your examples I see only GET for Content-Type: application/json
and POST for Content-Type: application/x-www-form-urlencoded
Thank you very much.
Hi! When I start the project, I have an notice saying that "The Apache Tomcat Native library which allows using OpenSSL was not found on the java." This is no problem for me (it's a little bit anoying that it prints mt entire path after that, but no problem)
But the real problem is when I try to point to my dfHttp as if it used https, so using "https://localhost:8080" instead of "http://localhost:8080" when this happens, it print an error and a stacktrace. I guess that this is not so intuitive for who is using
Go to semantic versioning.
https://semver.org
Thanks to @mjablecnik
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.